有几种方法可以实现你想要的,但这可能取决于你的仓库策略。例如,如果你变基你的分支,你将无法将其推回服务器,你需要使用-f选项或删除远程分支并推送一个新分支。一些人可能会说,一旦你已经将分支推到了服务器上,变基不是一个好方法,如果这是你的repo策略,那么你就必须将主分支合并到你的分支中,然后再将其推回远程。
让我们谈谈两种方法:
变基:
我个人更喜欢做变基,但前提是我确定没有其他人在远程使用我正在推送的分支。我喜欢变基,因为它最终会留下一个更干净的历史记录,它之所以能够达到这样的效果,是因为它从分支中删除了我的更改,应用了远程更改,然后再将我的更改放回顶部,但是,这样做会更改提交哈希值,并且与先前相同提交的哈希值不匹配,因此您必须使用-f选项将其推送或删除远程分支并重新创建它。
我会像这样做,在本地存储库中,我会进入主分支:
git checkout master
然后更新它的远程更改:
git pull
它将在你的git主分支上幕后运行一个合并的git fetch。
然后回到你的分支:
git checkout my_branch
然后将其与主分支进行变基:
git rebase master
如果一切都没有冲突,那么你就可以开始了。
你可以使用:
git push -f origin my_branch
(小心!这个命令会覆盖你的远程分支,非常危险,请确保在使用此命令之前一切正常。)
或者你可以删除你的远程分支,然后将其正常推回服务器:
git push origin my_branch
合并:
使用这种方法,你将在历史记录中得到一个合并提交,并且日志随着时间的推移可能会变得混乱,但也有一些优点,如果你确实有冲突,你只需要在合并时解决一次,如果你在变基时有冲突,你可能必须多次解决它,因为它会尝试逐个应用你的提交到新的远程提交上。
要做到这一点,你只需要进入主分支并更新它:
git checkout master
然后:
git pull
将执行与之前相同的操作
现在回到你的分支:
git checkout my_branch
然后运行:
git merge master
git push origin my_branch
在一行中完成这个最佳的方法是...
git pull origin master --rebase
rebase
的(相对初学者级别的)git问题的答案,应该始终附带一个警告/免责声明,指出重写已与他人分享(推送到远程)的历史记录可能产生负面后果。 - Thomas那会很有帮助:
$ git config --global branch.master.rebase true
或者
# cat ~/.gitconfig
[user]
name = xx
email = xx@xx.com
[branch "master"]
rebase = true
谢谢。
git checkout master
git pull
git checkout <your-branch>
git rebase master
git commit -m "I do this, do that"
将你的分支上传到远程
git push -u <remote-name> <your-branch-on-remote>
合并到主分支并将您的更新上传到远程
git checkout master
git merge --no-ff <your branch>
git push -u <remote-name> master