git合并指定文件 git如何合并指定文件
如何用Git合并两个库并保留提交历史
整个过程中主要用到的工具是 merge 和 read-tree,前者用于合并历史记录并且中断在提交之前,所产生的文件冲突不会被写入硬盘;然后利用后者重写整个文件树并把读取到的内容(读取的目标是 backend)写入新的路径下。
git合并指定文件 git如何合并指定文件
git合并指定文件 git如何合并指定文件
git合并指定文件 git如何合并指定文件
提交以结束合并。
第2步里,我们把 backend 作为 remote server 添加到 frontend 库中。
-f 的作用是在添加后立刻 fetch。
要注意一定得使用路径来引用 backend 库。
第3步里,--strategy ours 比较难以理解,且听我详细道来:一般来说当合并两个文件树时,如果遇到冲突我们是需要手动去解决它的,但是目前我们要做的不是解决冲突,而是在引入 backend 历史记录的前提下完整保留 frontend 的内容。
冲突肯定是会有的,即使两个不同的项目也是如此,比方说两边都有 README.md、app/、config/ 等文件或目录,但是我们不关心冲突,我们只要保留 frontend 的文件树并且把 backend 的历史记录合并进来。
Git撤销与合并
1. git init
创建一个空的git repo,也就是创建一个.git的子目录,这个目录包含了几乎所有git存储和作的东西。新初始化的.git目录的典型结构如下:
description文件仅供git web程序使用,平常无需关心。
config文件包含项目特有的配置选项。
目录包含一个全局性排除文件,用以放置那些不希望被记录在.gitignore文件中的忽略模式。
hooks目录包含客户端或服务端的钩子脚本。
HEAD文件指向目前被检出的分支。
index文件(尚待创建)保存暂存区信息。
objects目录存储所有数据内容。
refs目录存储指向数据的提交对象的指针。
git的默认分支名字是,git init时默认创建它。
2. git的三种状态,以及工作区(Working directory),暂存区(Index),HEAD
Git 有三种状态,你的文件可能处于其中之一:已修改(modified)、已暂存(staged)和已提交(committed)
基于刚才init的git project,做一些改动。
会看到在git add之后,.git下面多了一个index文件。
这时候,所做的改动就处于已暂存状态,体现在index文件中。
可以利用以下命令查看git缓存了的内容。
同时,.git/objects下面多了一个子文件夹,并生成了一个新文件。这个新文件就对应了刚才所做的改动。这就是git存储内容的方式--一个文件对应一条内容,以该内容加上特定头部信息一起的SHA-1校验和作为文件名。校验和的前两个字符用于命名子目录,余下的38个字符则作为文件名。后面会详叙。
可以通过cat-file命令从git那里查看存储的内容。
git cat-file -p e69de29bb2d1d6434b8b29ae775ad8c2e48c53
由于file1.txt的内容为空,所以这里显示为空。
这时候可以往file1.txt里添加一些内容,并git add。可以看到.git/objects又多了一个object。
查看这个新的对象的内容以及类型。会发现它是一个blob对象。
接下来commit这个change。
myProject $ git commit -m "first commit"
查看这个commit 对象的类型以及内容,commit的tree对象所指向的内容, 我们会发现,这个tree指向的是一个blob,而这个blob的内容,就是我们刚刚做过改动的文件。
同时,我们查看一下暂存区的内容:
会发现,暂存区指向的也是同样的blob对象。
至此,一个commit就提交了,工作区,暂存区,以及head又指向了同样的内容。
它们更新内容的顺序为,工作区->暂存区->head
3. git reset
将做过的change撤销掉,就像没有发生过一样。
git reset 应用的顺序为 head->暂存区->工作区。
(1) git reset --soft
当前,git的状态如下。
head指向的内容为:
(head是当前分支引用的指针,总是指向该分支上的一次提交。)
index指向的内容为:
(索引是你的预期的下一个提交)
我们来进行一次reset。(移动HEAD, --soft)
--soft将仅仅移动HEAD的指向,而并不会移动index以及工作区。
HEAD 指的是HEAD的父。HEAD 是父的父,也可以写成HEAD 2.
所以这个命令本质上是撤销了上一次git commit命令。
(2) git reset --mixed
接下来,再通过reset来更新索引。(--mixed,默认行为)
(3) git reset --hard
reset更新工作目录(--hard)
git reset --hard HEAD~
--hard标记是reset命令的危险用法,它也是git会真正销毁数据的几个作之一。
如果这个commit已经被推送到远端,可以用这个命令使远端也回退到相应的版本。
git push origin
4. git rrt
将做过的change撤销掉,通过“反做”某一个版本,用一个新的commit来消除做过的change。
当前git的状态:
rrt其中一个commit:
再来看,多了一个commit,也就是用来rrt的commit:
而若是想要rrt某个版本,但是在这个版本后又做过change,则在rrt的过程中可能出现冲突,则需要解决冲突之后再提交。
5. git merge 与git rebase
先来讲讲git merge。
当前 和 dev branch:
接下来打算将dev的工作并入分支。
另外,还想将的工作也并入dev。
git merge之后,会发现dev branch指向了与相同的commit:
所以,git merge是把两个分支的快照,以及两者近的共同祖先进行三方合并,合并的结果是生成一个新的快照。
接下来,用git rebase来合并分支。
当前的git状态
此时,采用git rebase,将dev的工作并入到。
当在 branch上执行git rebase dev的时候,实际发生的事情是,找到和dev两个分支的近共同祖先,对比当前分支(分支)相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将分支指向目标基底(dev的head指向的commit),以此将之前另存为临时文件的修改依序应用。
可以看到,rebase使得提交历史更加整洁。尽管实际的开发工作是并行在不同branch上进行的,但是它们看上去就像是串行的一样,提交历史是一条直线没有分叉。
因此,变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把终结果合在一起。这两种方式,整合的终结果所指向的快照始终是一样的,只不过提交历史不同。
怎样把git add 和 git commit 合并为一步作
相信当你使用Git有一段时间之后你渐渐发现git add 和 git commit 是使用得如此之频繁,要是能把它合并成一步或一条命令作就好了。
有了这个想法之后,我们再找到网上找类似的解决方案,似乎之有用命令别名之类的方法,可搭上点边。
其实嘛,同学,这个Git自带的命令就有好吗?只是你没发现而已!
好以下是作方法:
一,常规的作
1, 首先按需修改文件
echo >> lz66303.txt
2, 然后按需提交被修改的文件到HEAD缓存区
git add lz66303.txt
3, 再把这个修改记录到分支中
git commit -m"This is a commit created by lz66303."
二,合并的作
1, 首先按需修改文件
echo >> lz66303.txt
2, 然后按需提交被修改的文件到HEAD缓存区,并把这个修改记录到分支中
git commit -am"This is a commit created by lz66303."
总结
其实这人喜爱的命令git commit -am""也不是那么呀!
好我们查看一下帮助命令git commit -h
-a, --all commit all changed files(提交所有被修改的文件)
比如:你有新添加的文件这条命令就不适用。
以下是git comit 的帮助信息:
git 怎么提交合并分支的部分代码
如果执行自动合并没有成功的话,git会在索引和工作树里设置一个特殊的状态, 提示你如何解决合并中出现的冲突。
有冲突(conflicts)的文件会保存在索引中,除非你解决了问题了并且更新了索引,否则执行 git commit都会失败:
$ git commit
file.txt: needs merge
如果执行 git status 会显示这些文件没有合并(unmerged),这些有冲突的文件里面会添加像下面的冲突标识符:
<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
你所需要的做是就是编辑解决冲突,(接着把冲突标识符删掉),再执行下面的命令:
$ git add file.txt
$ git commit
注意:提交注释里已经有一些关于合并的信息了,通常是用这些默认信息,但是你可以添加一些你想要的注释。
上面这些就是你要做一个简单合并所要知道的,但是git提供更多的一些信息来 帮助解决冲突。
如何 git push 或者 merge 指定的几个文件
1、首先新建一个文本文件,名字为“.gitignore.txt”。
2、接着使用记事本打开,输入代码:“/222/”/222/: 表示不提交222目录/.txt: 表示不提交txt后缀的文件。
3、接着点击“文件”- “另存为”。
4、文件名填写“.gitignore”文件类型选择“所有文件”编码设置为“UTF-8”,点击确定,然后再删除不需要的文件.gitignore.txt。
5、创建222目录,并且里面有一个jpg文件。
6、输入代码提交,如图所示。
7、提交成功后在git仓库网址查看222目录没有提交。
版权声明:本文内容由互联网用户自发贡献。如发现本站有涉嫌抄袭侵权/违法违规的内容, 836084111@qq.com 举报,一经查实,本站将立刻删除。
随便看看
- 2025-05-04 山东高考283报什么专科(山东283能上什么专
- 2025-05-04 上海高考理科综合卷是什么 上海高考综合
- 2025-05-04 广东书法高考生有多少名额 广东书法高考
- 2025-05-04 高考报考画画专业怎么办_画画参加高考
- 2025-05-04 郴州体育高考分数线_郴州体育特长生中考