git rebase到远程更新

Bla*_*ers 22 git git-rebase git-remote

我与一个使用git进行源代码管理的小团队合作.最近,我们一直在做主题分支以跟踪功能,然后将它们合并到本地主服务器,然后将它们推送到远程服务器上的中央git存储库.当master中没有进行任何更改时,这很有用:我创建我的主题分支,提交它,将其合并到master中,然后推送.万岁.

但是,如果有人在我之前推送到原点,我的提交并不是快进的.因此,合并提交随之而来.当主题分支需要在本地与master合并以确保我的更改与现在的代码一起使用时,也会发生这种情况.因此,我们最终到处都是合并提交,以及与友谊手镯相媲美的git日志.

因此,变基是显而易见的选择.我想要的是:

  • 创建主题分支持有多个提交
  • checkout master和pull(快进因为我还没有承诺掌握)
  • rebase主题分支到新的主人头上
  • 针对主人的rebase主题(因此主题从主人头开始),将主人带到我的主题头

我目前的做法如下:

git checkout master
git rebase master topic_1
git rebase topic_1 topic_2
git checkout master
git rebase topic_2
git branch -d topic_1 topic_2
Run Code Online (Sandbox Code Playgroud)

有更快的方法吗?

Mar*_*wen 37

你知道git pull --rebase吗?当你拉动它时,它会变形而不是合并,并防止合并提交污染你的历史.

您还可以将其设置为具有branch.<name>.rebasebranch.autosetuprebaseconfig选项的分支的默认行为.

  • 是的,我在将共享代码库更新为远程最新代码库时经常使用它.然而,这篇文章更多的是关于功能分支更简化的方式,git pull rebase不是IMO.然而,分支自动rebase是一个很棒的功能,我已经将它添加到一些repos.棒极了!:) (2认同)

Bla*_*ers 11

我发现,随着时间的推移,我最喜欢的解决方案是:

git checkout topic
# make [n] commits
git rebase -i HEAD~[n] #clean up time
git checkout master
git pull --rebase
git checkout topic
git rebase master
git checkout master
git merge topic
git push origin
Run Code Online (Sandbox Code Playgroud)


And*_*y V 5

您也可以仅针对最新的 master 进行 rebase

git checkout topic_1
git rebase refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

这消除了拉取的需要(至少直到功能分支的 EOL 为止)。我们的流程使用 GitHub 拉取请求,因此我永远不需要在本地执行此操作。