之前可能已经提出这个问题,但我对术语有点困惑,所以我不确定哪些命令是正确的,以完成我需要完成的任务。现在我有一个GitHub存储库,我和我的团队一起工作。在那里,我为一项任务做了一个分支。我将存储库克隆到我的本地计算机,然后在本地检出该分支。我开始进行更改,我希望继续工作......在进行这些更改时,我的团队一直在更新代码并将更改推回到GitHub上的主分支。我如何从GitHub上的主分支中删除它们的更改,以便它在本地和GitHub上更新我的分支(现在在GitHub上,它表示我提前1次提交,19次提交在master之后)。感谢这里的建议...这将是我计划定期做的事情,所以学习正确的过程对我有用...
答案 0 :(得分:1)
您可以在此处应用一系列方法来完成您想要的任务。这可能取决于您的存储库策略。例如,如果您重新分支您的分支,您将无法将其推回到服务器,您必须使用-f推送它或删除远程分支并推送新的分支。有人可能会说,一旦你已经将分支推送到服务器,rebase不是一个好方法,如果这是你的repo的策略,那么你必须将master合并到你的分支中,而不是将它推回到远程。
让我们谈谈这两种方法:
<强>调整基线:强>
我个人更喜欢做rebase,但只有在我确定没有其他人正在使用我正在推动遥控器的分支时。我喜欢rebase,因为这最终会留下一个更清晰的历史记录,它会这样做,因为它从分支中删除了我的更改,应用了远程更改,然后将我的更改重新应用到顶部,但是,这样做,它会更改提交哈希值,它会与之前为同一次提交而不匹配,因此您必须使用-f推送它或删除远程分支并再次创建它。
我会这样做,在你的本地存储库中我会去主分支:
git checkout master
然后使用远程更改进行更新:
git pull
它会在git master分支的幕后运行git fetch并进行合并。
然后回到你的分支:
git checkout my_branch
然后将其与主人重新绑定:
git rebase master
如果一切都没有冲突,你就可以去了。
你可以使用:
git push -f origin my_branch
(小心!这个命令会覆盖你的远程分支,在使用这个命令之前确保你的rebase上的一切正常都非常危险。)
或者您可以删除远程分支端,将其正常推回服务器:
git push origin my_branch
<强>合并:强>
使用这种方法你最终会在你的历史记录中进行合并提交,并且日志会随着时间的推移而变得混乱,但是这也有一些优点,如果你确实有冲突,你需要解决它只有一次,当你正在合并时,如果你在变基时遇到冲突,你可能需要多次解决它,因为它会尝试逐个应用你的提交新的远程提交。
要执行此操作,您只需转到主分支并进行更新即可:
git checkout master
和
git pull
会像我们之前看到的那样做
现在回到你的分行:
git checkout my_branch
并运行:
git merge master
如果您没有任何冲突,那么您可以将其推送到服务器,如果您只需要解决它,您也可以将其正常推送到服务器,因为现在您已经解决了新提交中的冲突,您的本地分支和远程分支之间没有任何分歧。
git push origin my_branch
就是这样,我希望你觉得这很有帮助,你可以用更少的步骤做到这一点,但这些只是我喜欢的步骤,它们可能不是较短的步骤,但我觉得这样更安全。当然,在合并和重新定位方面有很多选择我会建议你多看看它们是非常有用的。
答案 1 :(得分:0)
那会有所帮助:
$ git config --global branch.master.rebase true
或
# cat ~/.gitconfig
[user]
name = xx
email = xx@xx.com
[branch "master"]
rebase = true
感谢。
答案 2 :(得分:0)
如何从GitHub上的master分支中删除更改 它在本地更新我的分支
git checkout master
git pull
git checkout <your-branch>
git rebase master
和GitHub一样(现在在GitHub上,它说我是1提交 未来和19个承诺在主人之后)。
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
答案 3 :(得分:0)
在一行中完成此操作的最佳方法...
git pull origin master --rebase