我有一个开发分支,我想合并到主分支。2但是我遇到了冲突。哪种方法更好地处理冲突方法一:方法2: checkout dev分支并将主分支合并到dev分支中,然后提交并推送。它们之间有什么区别?
vi4fp9gy1#
方法1是错误的,方法2是正确的。方法1没有任何意义。您通常会推和拉到具有相同名称的分支。您在本地存储库上的任何分支与您为该存储库定义的任何远程分支之间应该有1:1的对应关系。否则,无法跟踪什么代码在哪里。实际上有两种方法可以做到这一点,其中一种是首选的方法,并得到Github,Gitlab,Bitbucket等的支持,另一种则不是。
正如你所描述的:
你是选择rebase方法还是merge方法通常取决于什么是最实用的。当你在分支上有一系列的提交时,rebase方法是很有意义的,其中所有的内容都与最近进入master的内容无关。如果你有一系列的提交与最近在master上所做的更改相耦合,merge方法更有意义。作为一个经验法则,合并 * 通常 * 比变基更少的工作。
如果您使用的是强制执行特定工作流的GUI(如Github等),或者您定义了防止直接提交到master的规则,则可能不支持这种方式。
它和上面的一样,但是对称地颠倒了。显然不是在所有情况下都有效,原因如上所述。
k4emjkb12#
它们在大多数情况下是相同的。可能的差异:1.设置了一些配置变量,如pull.rebase,pull.ff。它们会影响git pull的行为。没有这些变量,git pull origin main大约是git fetch origin main && git merge origin/main。有了pull.rebase=true,git pull origin main大约是git fetch origin main && git rebase origin/main。它们会导致不同的日志图。
pull.rebase
pull.ff
git pull
git pull origin main
git fetch origin main && git merge origin/main
pull.rebase=true
git fetch origin main && git rebase origin/main
main
git merge main
2条答案
按热度按时间vi4fp9gy1#
方法1是错误的,方法2是正确的。
方法1没有任何意义。您通常会推和拉到具有相同名称的分支。您在本地存储库上的任何分支与您为该存储库定义的任何远程分支之间应该有1:1的对应关系。否则,无法跟踪什么代码在哪里。
实际上有两种方法可以做到这一点,其中一种是首选的方法,并得到Github,Gitlab,Bitbucket等的支持,另一种则不是。
首选方式:
正如你所描述的:
你是选择rebase方法还是merge方法通常取决于什么是最实用的。当你在分支上有一系列的提交时,rebase方法是很有意义的,其中所有的内容都与最近进入master的内容无关。如果你有一系列的提交与最近在master上所做的更改相耦合,merge方法更有意义。
作为一个经验法则,合并 * 通常 * 比变基更少的工作。
替代方式:
如果您使用的是强制执行特定工作流的GUI(如Github等),或者您定义了防止直接提交到master的规则,则可能不支持这种方式。
它和上面的一样,但是对称地颠倒了。显然不是在所有情况下都有效,原因如上所述。
k4emjkb12#
它们在大多数情况下是相同的。可能的差异:
1.设置了一些配置变量,如
pull.rebase
,pull.ff
。它们会影响git pull
的行为。没有这些变量,git pull origin main
大约是git fetch origin main && git merge origin/main
。有了pull.rebase=true
,git pull origin main
大约是git fetch origin main && git rebase origin/main
。它们会导致不同的日志图。main
的头可以不同。git pull
总是从远程存储库获取main
的最新头,而git merge main
使用本地主。本地主可以与远程主相同,落后,领先或偏离。