如何将 master 拉到我正在处理的当前分支中,并查看冲突?
另外,我应该合并还是变基,不确定两者中的哪一个是正确的。
首先从远程拉出所有分支
git pull origin
完成此操作后,所有分支都将被拉出(包括主分支)。
现在您想将 master 合并到您当前的分支中,因此您可以:
git merge master
如果它自动解决了任何冲突,那么你就完成了。
如果它说它没有自动合并更改,那么您需要解决冲突。
要解决冲突,请编辑您的 ~/.gitconfig 并添加
[merge]
tool = meld
现在安装 meld diff 工具(例如在 Ubuntu 上,您只需执行sudo aptitude install meld
你会得到一个像这样的窗口
在左侧,您将拥有本地版本。在右侧,您将拥有远程版本。
中间是合并后您想要的状态。从两边选择并挑选所有位并将它们放在中间后,保存(CTRL + S)并退出融合。Git 现在将告诉您必须合并的下一个文件,并且您将执行相同的操作,直到完成合并。
您可以git diff
在此结束时执行以确保您所做的合并是正确的。
还要运行您的代码以确保它按您的意愿工作。
然后你提交git commit -am "commit_message"
并将更改推送到你的分支。
为什么要拉入当前分支?听起来很麻烦。
要不你弄个最新的master,然后对比一下区别?这样你就不会在不知道你进入什么的情况下合并。
在这种情况下:
# in your master branch do
git pull origin master
切换到您正在处理的功能分支:
git checkout your_branch_name
现在您在新分支中,您可以看到差异(绿色是您添加的内容,假设颜色也已打开)
git diff master
当然,您可以在不进行结帐的情况下看到与 master 的差异。所以在这种情况下,你拉原点主人,然后做一个差异:
# in master
git pull origin master
# now do a diff while still in master
git diff your_new_feature_branch
合并和变基都有其优点和缺点。
rebase 的优点:保持提交历史“更干净”,因为“master”的当前负责人将是您当前分支的祖先。有时人们不喜欢把共同的祖先埋得太深。有些地方的政策是在提交之前始终将功能分支重新定位到 master 上。
rebase 的缺点:完全重写你的分支的历史(所有的 sha1 都会不同)。如果您或其他任何人从您的功能分支创建了分支,然后您尝试将其合并回来,这可能会导致麻烦。
一个可能的好的经验法则:rebase 尚未广泛发布的分支,因此不是其他分支的基础。