我有以下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
了一段时间,但是它经常卡住并且需要更多的人工干预。
答案 0 :(得分:2)
当推送失败时,您知道遥控器必须已更新,因此您的本地origin/develop
副本已过期。我喜欢在决定如何处理之前知道发生了什么变化,所以我通常会跑步
$ git fetch
首先,所以我可以看一下git log --all --graph --decorate
或gitk --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