git - Squash - rebase - 主历史关注点

标签 git github

我对 rebase 命令有点担心。如此之多,以至于我真的拖延了完成这个为 libGDX 实现陀螺仪功能的 pull 请求。 https://github.com/libgdx/libgdx/pull/3361

如果你看一下我的提交,就会发现我很早就提交了,而且经常提交。然后我同步了,投入了更多。现在我必须再次同步,在他们接受此 pull 请求之前测试所有内容。

所以,有大量的提交与 merge 等交织在一起。我认为这是一团糟。
维护者希望我将我的提交压缩为一个。说得通。不过,这就是我的天真发挥最大作用的地方。

rebase 只会影响我的提交吗?或者是否有可能通过在我的分支中重新建立基础并 merge 来覆盖所有项目历史记录?

我应该重新开始,检查master,进行所有相同的更改,然后发出另一个 pull 请求吗?

最佳答案

这个问题的根源实际上与您的 libgdx 分支在 master 分支中完成的更改有关。理想情况下, pull 请求的工作应该在 Git 的“功能”或“主题”分支中完成:

  1. fork 主 libgdx 存储库

  2. 克隆您的分支,并添加一个名为“upstream”的远程指向原始存储库:

    git clone https://github.com/snovak/libgdx.git
    cd libgdx
    git remote add upstream https://github.com/libgdx/libgdx.git
    
  3. 从您的 master 中创建一个新的主题分支:

    git checkout -b android_gyroscope_implementation master
    
  4. 完成工作,并进行任意数量的提交

  5. 根据“上游”分支的新更改重新调整您的提交:

    git fetch upstream
    
    # Keep your commits
    git rebase upstream/master
    
    # "Squash" your commits interactively to summarize your work
    git rebase -i upstream/master
    
  6. 当您准备好 pull 请求时,将更改推送到您的 fork

    # The first time
    git push origin -u android_gyroscope_implementation
    
    # Subsequent pushes just need:
    git push origin HEAD
    
  7. 提交您的 pull 请求

  8. 从现在开始,只需将 upstream/master merge 到 android_gyrscope_implementation 中即可维护历史记录。

  9. 原始存储库的维护者可以执行git merge --squash,或者在最终 merge 之前,您可以执行另一个git rebase -i上游/master > 并将所有提交压缩为一个。

关于git - Squash - rebase - 主历史关注点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33829117/

相关文章:

python - 如何使用远程分支 pull 、推

git - 从 googlesource 下载 App 的特定分支

Github:重置为之前的提交

git - 如何在 Github 中将单独的 pull 请求与 "stacking"相互叠加?

python - 将 pip 与 git repo 一起使用是否安全?

git - 如何为Git同步操作指定ppk?

svn - GIT和SVN在 merge 冲突解决上有什么区别

git如何通过完全覆盖master分支将一个分支 merge 到master分支

javascript - 为什么 GitHub 会在我的 jekyll 站点上附加一个 js

git - 反之亦然如何将HDFS中的文件获取/复制到Git存储库中?