我有一个git行为方面的困惑:
以下是步骤和情况(命令列表也在后面给出):
1.我有两个分支:master和XBranch 2.这两个分支中都有一个src / a.txt文件。 它的内容是“旧内容” 3.在XBranch中,我使用“移动”,“git rm”和“git add”将src / a.txt重命名为src / b.txt。 4.在master中重命名a.txt。 在提交期间,我执行了“git rm src / a.txt”,但忘记执行“git add src / b.txt” 在主分支上,我进行以下操作: git rm src/a.txt 和 git commit 5.在master中,我编辑了文件b.txt的内容为“New Content” 6.在主分支中,我执行git add src / b.txt和git commit 7.在主分支中,我执行: git merge XBranch
src / b.txt文件冲突,这是可以理解的。 但是它的内容是“旧内容”。 为什么呢?
为什么不是像这样的东西:
以下是步骤和情况(命令列表也在后面给出):
1.我有两个分支:master和XBranch 2.这两个分支中都有一个src / a.txt文件。 它的内容是“旧内容” 3.在XBranch中,我使用“移动”,“git rm”和“git add”将src / a.txt重命名为src / b.txt。 4.在master中重命名a.txt。 在提交期间,我执行了“git rm src / a.txt”,但忘记执行“git add src / b.txt” 在主分支上,我进行以下操作: git rm src/a.txt 和 git commit 5.在master中,我编辑了文件b.txt的内容为“New Content” 6.在主分支中,我执行git add src / b.txt和git commit 7.在主分支中,我执行: git merge XBranch
src / b.txt文件冲突,这是可以理解的。 但是它的内容是“旧内容”。 为什么呢?
为什么不是像这样的东西:
<<<<<<< HEAD
New Content
=======
Old content
>>>>>>> XBranch
命令列表:
sabya@SABYA-PC d:/merge_temp/test/case2
$ mkdir source
sabya@SABYA-PC d:/merge_temp/test/case2
$ git init
Initialized empty Git repository in d:/merge_temp/test/case2/.git/
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ mkdir src
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ vi src/a.txt
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ cat src/a.txt
Old Content
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ git add src/
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ git commit
[master (root-commit) 148500e] added src/a.txt
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 src/a.txt
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ git branch XBranch
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ git checkout XBranch
Switched to branch 'XBranch'
sabya@SABYA-PC d:/merge_temp/test/case2 (XBranch)
$ mv src/a.txt src/b.txt
sabya@SABYA-PC d:/merge_temp/test/case2 (XBranch)
$ git rm src/a.txt
rm 'src/a.txt'
sabya@SABYA-PC d:/merge_temp/test/case2 (XBranch)
$ git add src/b.txt
sabya@SABYA-PC d:/merge_temp/test/case2 (XBranch)
$ git commit
[XBranch b3ff8fa] changed a.txt to b.txt in XBranch
1 files changed, 0 insertions(+), 0 deletions(-)
rename src/{a.txt => b.txt} (100%)
sabya@SABYA-PC d:/merge_temp/test/case2 (XBranch)
$ git checkout master
Switched to branch 'master'
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ mv src/a.txt src/b.txt
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ git rm src/a.txt
rm 'src/a.txt'
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ git commit
[master bfeaecb] removed src/a.txt
1 files changed, 0 insertions(+), 1 deletions(-)
delete mode 100644 src/a.txt
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ vi src/b.txt
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ cat src/b.txt
New Content
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ git add src/b.txt
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ git commit
[master 2361d5e] changed content of b.txt
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 src/b.txt
sabya@SABYA-PC d:/merge_temp/test/case2 (master)
$ git merge XBranch
CONFLICT (rename/delete): Rename src/a.txt->src/b.txt in XBranch and deleted in HEAD
Automatic merge failed; fix conflicts and then commit the result.
sabya@SABYA-PC d:/merge_temp/test/case2 (master|MERGING)
$ cat src/b.txt
Old Content
case2
目录)都引用了一个新的文件a.txt
:它们的内容被合并,冲突得到解决。在此之前,a.txt
(重命名为b.txt
)和一个新的b.txt
之间存在冲突:这两个文件不能同时存在于同一个分支中,必须做出选择(选择文件而不是文件内容)。 - VonCXBranch
(其中a.txt
被重命名为b.txt
)与步骤6中的新b.txt
(树冲突)合并到主分支提交中,你应该将XBranch
(其中a.txt
被重命名为b.txt
)与新的步骤4中的主分支合并(a.txt
也被重命名为b.txt
):相同的树内容,但不同的blob内容:行冲突。 - VonCgit reset -- <path>
,那么就没有更改可以提交,我被迫使用git rebase --skip
。但是这只是突然结束了变基!(我还有更多的提交要应用!它们被丢弃了!) - Neil Traft