如果远程更新,则撤消本地合并

时间:2018-10-01 07:11:36

标签: git

我有以下git工作流程:

# finish locally committing to feature/new_thing
git push origin feature/new_thing
git checkout develop
git pull # Just in case I get a warning
git merge feature/new_thing
git push origin develop

这在99%的时间中有效,但在其他1%的时间中,发生这种情况:

#Me                             #Other dev
git push origin feature/new_thing
                                git merge feature/other_new_thing
git checkout develop
                                git checkout develop
git pull
                                git pull
git merge feature/new_thing
                                git merge feature/other_new_thing
                                git push origin develop
git push origin develop

现在,我的push可能因以下原因失败了:

error: failed to push some refs to 'git@server.git'

让自己恢复同步的最简单方法是什么? git reset HEAD~删除我的分支提交,并且git pull要再次合并。我通常会reset回到分支之前,然后重新pull重新签入

必须有一种简单的方法来做到这一点!我确实尝试过使用git-workflow了一段时间,但是它经常卡住并且需要更多的人工干预。

2 个答案:

答案 0 :(得分:2)

当推送失败时,您知道遥控器必须已更新,因此您的本地origin/develop副本已过期。我喜欢在决定如何处理之前知道发生了什么变化,所以我通常会跑步

$ git fetch

首先,所以我可以看一下git log --all --graph --decorategitk --all或类似的东西。

如果您决定要在最新的基础上重新提交,则可以使用

$ git pull --rebase

如果这不是一个干净的基准,您将需要手工进行修复-如果您认为这种情况将要发生(或者已经发生,并且您运行了git rebase --abort),则可能希望重设并重新手动进行合并:

$ git reset --hard origin/develop

(我倾向于避免使用合并提交的HEAD〜,因为我永远不记得哪个是哪个父对象。)

答案 1 :(得分:1)

您有两种常规选择。

第一个,也是我通常采用的一个方法,是在develop的远程版本之上重新设置develop的版本。如果存在合并冲突,则可以随时解决(例如,完成后rebase --continue)。

# On local `develop`
git rebase origin/develop

如果您发现进行中的增量合并冲突过多,请使用--interactive选项进行重新设置,并从{{1}的历史记录开始,对develop上的所有提交进行预压缩}。

另一种选择是将develop的远程版本合并到您的版本中。这将不可避免地创建一个合并提交,如果您希望保持Git历史记录尽可能地线性,那么这将是难看的。

develop