在git rebase期间:同一个文件保持冲突

时间:2013-01-14 15:19:00

标签: git git-rebase

我检查了一个名为'topic'的分支。我仍在研究主题,但我希望包含现在在主分支中的更改。所以我这样做了:

$ git checkout topic
$ git rebase master

之后,文件xyz.txt出现了合并冲突。所以我将文件修改为我想要的,git添加它,然后git rebase --continue

但是,即时,同一个文件有合并冲突。我再次修复了文件,这次必须git reabase --skip才能继续。

但是再次同一个文件具有完全相同的合并冲突。这是怎么回事?

编辑:

以前,我一直在将主人合并到主题分支中以实现此目的。然后我才知道了rebase。所以我猜这与它有关。


这是第三次提交之前的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)
| *
| |\
| |/
|/|
* |
| *
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
| *
| *
| *
| |\
| |/
|/|
* |
* |
* |
|\ \
| * |
* | |
|/ /
| *
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
| *
| *
| *
| *
| *
| |\
| |/
|/|
* |
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
|/
*
*

3 个答案:

答案 0 :(得分:3)

尝试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

有时,Git不知道提交在分支中是否真的是新的,或者只是来自不同祖先的现有提交(来自master)。您可以通过从文本文件中删除提交来跳过提交。

如果这不能立即解决您的冲突,则两个分支之间存在真正的冲突。请务必合并文件并使用git add暂存它们。之后一定要使用git rebase --continue继续前进。如果你不确切知道它在这里有用,请不要使用git rebase --skip。 (--skip将忽略当前的冲突提交并尝试应用下一次提交,这可能会导致以后进一步的不可理解的冲突。)

答案 1 :(得分:1)

根据你的图表,其他人使用merge而不是rebase,你应该做

git checkout topic
git merge master or origin/master if you want last changes to be merged too

注意,rebase将在您的分支主题上移动分支主文件

答案 2 :(得分:0)

我不知道这是如何导致这个问题的,但我非常确定这个问题是因为我以前合并而不是变基因。但是我还没有推动topic,所以我将完成整个rebase过程。