在Git pull中如何解决合并冲突?

3

我需要帮助解决从GitHub拉取时git合并冲突的问题,我在当前分支上进行了以下操作:

  1. git pull --rebase master
  2. git pull ssh:.....(从我的评论中获取更改)
  3. 一个文件中有合并冲突
  4. 删除所有冲突
  5. git add .
  6. 当我尝试使用git commit --amend提交回来时,出现错误

"fatal: you are in the middle of merge -- cannot amend"

我想要再次修改相同的提交,而不会创建新的提交ID。有什么方法吗?


我想再次修改同一次提交,而不创建新的提交ID...你不能这样做。关于您立即遇到的错误,您解决合并冲突后是否运行了git status命令?如果您看到一个消息显示仍然存在一些冲突,则会阻止您进行提交。 - Tim Biegeleisen
合并时,除了合并提交之外,不会创建新的提交。当 git status 显示所有冲突已解决时,运行 git merge --continue - tehhowch
我看到了一条消息:“所有冲突都已解决,但你还在合并中。”使用git commit来结束合并。 - mahemad
谢谢大家的帮助,git merge --continue 对我很有用。 - mahemad
2
请注意,git merge --continue 只是在“引擎盖下”运行 git commit。很高兴 Git 团队在 Git 版本 2.12.0 中添加了这个选项。但如果你的 Git 版本早于此版本,你必须使用 git commit - torek
1个回答

3

考虑到你的历史记录如下:

B    C1   C2
o----o----o master
      \
       o feature
       F

您可以将从 feature 分支中的更改变基到要拉取它们的分支(即 master),使其成为“快进合并”,从而创建线性历史:

B    C1   C2   F
o----o----o----o master, feature

或者,在您所描述的阶段,您可以运行 git commit(不带--amend)来继续创建一个提交记录,以记录合并的结果:

B    C1   C2   M
o----o----o----o master
      \       /
        --o--  feature
          F

如果您希望有一个明确的合并提交来表示您合并了一个功能分支,您可以使用--no-ff标志进行变基,然后合并,创建类似于这样的内容:
B    C1   C2        M
o----o----o---------o master
           \       /
             --o--  feature
               F

选择哪个变体取决于您自己的决定; 三者都是有效的。通常我更喜欢将特性分支变基,以避免在单独提交(合并提交)中解决合并冲突。保持历史线性(没有合并)还是不是一个工作流程和品味问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接