从master创建一个新分支,我们称之为test。
有几个开发人员要么提交到master,要么创建其他分支,然后合并到master。
假设测试工作需要几天的时间,您希望通过master内部的提交不断更新测试。
我会从测试中提取原始主机。
问题1:这是正确的方法吗?其他开发人员可以像我一样轻松地处理相同的文件。
我的测试工作已经完成,我已经准备好将其合并回master。以下是我可以想到的两种方法:
A:
git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test
B:
git checkout test
git pull origin master
git checkout master
git merge test
我没有使用--rebase,因为根据我的理解,rebase将从master获取更改,并将我的更改叠加在上面,因此它可能会覆盖其他人所做的更改。
问题2:这两种方法中哪一种是正确的?有什么不同?
所有这一切的目标是让我的测试分支随着master中发生的事情而更新,然后我可以将它们合并到master中,希望尽可能保持时间线的线性。
正如标题所说的“最佳方式”,我认为考虑耐心合并策略。
发件人:https://git-scm.com/docs/merge-strategies
使用此选项,“merge recursive”会花费一点额外的时间来避免由于不重要的匹配行(例如,不同函数的大括号)而有时发生的错误合并。当要合并的分支出现严重分歧时,请使用此选项。另请参见gitdiff[1]——耐心。
用法:
git fetch
git merge -s recursive -X patience origin/master
Git别名
我总是为此使用别名,例如运行一次:
git config --global alias.pmerge 'merge -s recursive -X patience'
现在你可以做到:
git fetch
git pmerge origin/master
这里已经有很多好答案了。我只是在添加我所做的步骤。
git fetch -p
git checkout master
git rebase origin/master
git checkout test
git rebase master
解释
gitfetch-p将检索自上次获取以来所做的任何更改,-p将修剪您的分支,删除所有过时的分支。
git checkout master签出master分支
gitrebaseorigin/master更新master分支。在这里做一次拉动会得到同样的结果。
gitcheckout测试签出您所做更改的分支
gitrebasemaster使用master上的更改更新测试分支。这将合并所有更改的文件,如果在任何提交上存在冲突,则必须解决它们,然后执行git rebase--continue或git rebase--abort