我正在一个大型团队工作,团队经常将提交压缩到上游。在这一点上,我的起源历史与上游的历史不同,唯一能够“同步”它们的方法是重置为上游并强制推送到原点。
有没有办法与上游“同步”或重写我的起源历史记录,以摆脱我的“迷你”提交,并将其替换为来自上游的被压扁的提交?
答案 0 :(得分:3)
有几种方法可以在git中执行此操作 - 我将尝试解释其中一个。假设您正在使用名为bug_fix
的本地分支。您应该能够通过执行以下操作与上游同步:
从bug_fix
创建新分支:
git checkout -b temp_bug_fix
返回原始bug_fix
分支并将HEAD
重置为本地分支与上游同步的位置。假设前10次提交,命令将是:
git checkout bug_fix
git reset --hard HEAD~10
从上游拉出所有新更改。这会将bug_fix
与origin
git pull origin <upstream_branch>
使用适当的SHA从temp_bug_fix
分支中挑选您的提交
git cherry-pick <you_commit_SHA>
现在您已经同步,您可以正常推送到上游(不使用-f
)
git push origin <upstream_branch>
这个答案假设您所有的更改都是在所有&#39; mini&#39;之后完成的。其他人的承诺。
我很想知道你当地的分支机构是如何进入这种状态的。标准做法是开发人员应该在推送到源之前压缩他们的提交。一旦本地分支合并到上游,没有人应该使用强制推动来改变历史 - 这只是一个麻烦的方法。