在 git rebase 期间:同一个文件不断发生冲突

问题描述 投票:0回答:3

我查看了一个名为“topic”的分支。我仍在研究这个主题,但我想包括现在在主分支中的更改。所以我这样做了:

$ git checkout topic
$ git rebase master

此后,文件

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

但很快,同一个文件就出现了合并冲突。我再次修复了该文件,这次必须执行

git reabase --skip
才能继续。

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

编辑:

之前,我一直将 master 合并到主题分支来实现这个目的。然后我就学会了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)
| *
| |\
| |/
|/|
* |
| *
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
| *
| *
| *
| |\
| |/
|/|
* |
* |
* |
|\ \
| * |
* | |
|/ /
| *
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
| *
| *
| *
| *
| *
| |\
| |/
|/|
* |
| *
| |\
| |/
|/|
* |
| *
| *
| *
| *
|/
*
*
git git-rebase
3个回答
4
投票

尝试

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
将忽略当前的冲突提交并尝试应用下一个提交,这可能会导致稍后出现进一步难以理解的冲突)。
    


0
投票
topic

,所以我将完成整个 rebase 过程。

    


0
投票

切换到掌握或开发(目标)
  • 与[本地]目标中的分支合并
  • 切换回来并重试变基,然后推送(最终强制)
  • 硬重置主人或发展到原点/... 这可能是一个黑客,但它几乎一直有效。
© www.soinside.com 2019 - 2024. All rights reserved.