如何有效地改组和推送本地git分支?

时间:2009-06-03 15:19:42

标签: git merge rebase

我们正在使用我克隆的中央git存储库,而且我正在本地分支上工作。

当我想在中央存储库中提供更改时,我必须发出以下命令(从mybranch开始):

#Stash local changes not yet ready for checkin
git stash

#Make sure we have all changes from the central repository
git checkout master
git pull

#Rebase local changes
git checkout mybranch
git rebase

#Push changes
git checkout master
git merge mybranch
git push

#Back to my branch and continue work
git checkout mybranch
git stash apply

我想知道是否可以使用更少的git命令来实现相同的目标。 mastermybranch之间的几个开关特别烦人,因为我们的存储库非常庞大,所以需要一些时间。

4 个答案:

答案 0 :(得分:13)

如果您不需要更新它,则无需触摸本地主分支,这似乎会导致大量不必要的分支切换。

这是一个更小的工作流程。

git fetch

# ensure that everything is committed
# perhaps git commit -a is required...

git rebase origin/master


# If you don't want to push the very latest commits you might
# want to checkout a parent or ancestor of the current commit
# to test that the proposed commit passes tests, etc.
# e.g. git checkout HEAD~n

# push to the remote master
git push origin HEAD:master

# if you checked out a parent, go back to the original branch
git checkout mybranch

如果您对父提交非常有信心,可以跳过结帐步骤并执行以下操作,但我强烈建议您不要这样做。发布未经测试的提交不是“最佳实践”。

git push origin HEAD^:master

答案 1 :(得分:6)

没有必要对master和mybranch分支进行拉取。既然你是一个如此优秀的公民并且正在进行快速更新,那么它非常直接:

# Save local mods not ready for commit
git stash
# Do the pull & rebase local work assuming this is a remote tracking branch
git pull --rebase
git checkout master
git merge mybranch
git push

当然,您也可以从mybranch分支推送

# Save local mods not ready for commit
git stash
# Do the pull & rebase local work assuming this is a remote tracking branch
git pull --rebase
git push origin mybranch:master

答案 2 :(得分:1)

您可以将pull和rebase合并为一个:

git pull --rebase master

但总体而言,是的,根据我的经验,它涉及所有这些命令。

为了保持您的存储库清洁,经常运行“git gc”将有助于删除未使用的对象。这应该减少分支切换时间。

答案 3 :(得分:0)

我经常这样做。

git co master
git pull
git rebase master mywrk # fix conflicts if any
git rebase mywrk master
git push

如果您愿意,可以定义别名以保存输入。