我们正在使用我克隆的中央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命令来实现相同的目标。 master
和mybranch
之间的几个开关特别烦人,因为我们的存储库非常庞大,所以需要一些时间。
答案 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
如果您愿意,可以定义别名以保存输入。