我签出了一个名为“主题”的分支。我仍在研究主题,但我想包括现在在master分支中的更改。所以我这样做:
$ git checkout topic
$ git rebase master
Run Code Online (Sandbox Code Playgroud)
之后,存在file的合并冲突xyz.txt。因此,我将文件修改为所需的文件,git添加了文件,然后执行了git rebase --continue。
但立即,同一文件存在合并冲突。我再次修复了文件,这次不得不git reabase --skip继续。
但同样,同一文件具有完全相同的合并冲突。这是怎么回事?
编辑:
以前,我一直在将master合并到topic分支中以实现此目的。然后,我才了解到了变基。所以我想这可能与它有关。
这是第三次提交之前git的状态
$ git status
# Not currently on any branch.
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: xyz.java
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git ls-files -u
100644 cbf74a88604dd4ee0afe89d7aac1d179ce75e92c 1 xyz.java
100644 52841c2b4b6cc055251d533d5b83441d1329b412 2 xyz.java
100644 c45e7c6b979ec1e20b7dd70b38698193ea235abd 3 xyz.java
$ git log --graph --pretty=format:%d HEAD master topic
* (HEAD)
*
* (master)
*
*
*
*
*
*
*
*
| * (topic)
| *
| |\
| |/
|/|
* |
| *
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
| *
| *
| *
| |\
| |/
|/|
* |
* |
* |
|\ \
| * |
* | |
|/ /
| *
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
| *
| *
| *
| *
| *
| |\
| |/
|/|
* |
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
|/
*
*
Run Code Online (Sandbox Code Playgroud)
尝试git rebase --interactive验证 Git 将如何重新设置历史记录。将有一个提交列表,这些提交将按给定顺序应用到您的基本提交之上,即master:
例子:
pick 12345678 # This will be the first commit of your rebased topic branch
pick deadbeef
pick ffffffff
pick 01010101 # This will be HEAD after the successful rebase
Run Code Online (Sandbox Code Playgroud)
有时,Git 不知道提交是在分支中真的是新提交还是只是现有提交(来自 master具有不同祖先)。您可以通过从文本文件中删除提交来跳过提交。
如果这不能立即解决您的冲突,则两个分支之间存在真正的冲突。请务必合并文件并使用git add. 之后一定要使用git rebase --continue继续前进。git rebase --skip如果您不确切知道它在这里有用,请不要使用。(--skip将忽略当前的冲突提交并尝试应用下一个提交,这可能会导致以后更难以理解的冲突)。