用上游历史重写原始历史?

时间:2016-01-22 22:48:54

标签: git

我正在一个大型团队工作,团队经常将提交压缩到上游。在这一点上,我的起源历史与上游的历史不同,唯一能够“同步”它们的方法是重置为上游并强制推送到原点。

有没有办法与上游“同步”或重写我的起源历史记录,以摆脱我的“迷你”提交,并将其替换为来自上游的被压扁的提交?

1 个答案:

答案 0 :(得分:3)

有几种方法可以在git中执行此操作 - 我将尝试解释其中一个。假设您正在使用名为bug_fix的本地分支。您应该能够通过执行以下操作与上游同步:

  1. bug_fix创建新分支:

    git checkout -b temp_bug_fix
    
  2. 返回原始bug_fix分支并将HEAD重置为本地分支与上游同步的位置。假设前10次提交,命令将是:

    git checkout bug_fix
    git reset --hard HEAD~10
    
  3. 从上游拉出所有新更改。这会将bug_fixorigin

    同步
    git pull origin <upstream_branch>
    
  4. 使用适当的SHA从temp_bug_fix分支中挑选您的提交

    git cherry-pick <you_commit_SHA>
    
  5. 现在您已经同步,您可以正常推送到上游(不使用-f

    git push origin <upstream_branch>
    
  6. 这个答案假设您所有的更改都是在所有&#39; mini&#39;之后完成的。其他人的承诺。

    我很想知道你当地的分支机构是如何进入这种状态的。标准做法是开发人员应该在推送到源之前压缩他们的提交。一旦本地分支合并到上游,没有人应该使用强制推动来改变历史 - 这只是一个麻烦的方法。