git Merge和Rebase的不同结果
Git merge和rebase的目标是相同的,将两个分支重新连接在一起,以获得一个最新的分支 在androidstudio(显然使用git命令)中尝试Merge和Rebase工具时,我得到了不同的结果 合并-显示多个文件之间的真实冲突 Rebase-仅显示1个冲突文件git Merge和Rebase的不同结果,git,android-studio,git-merge,git-rebase,Git,Android Studio,Git Merge,Git Rebase,Git merge和rebase的目标是相同的,将两个分支重新连接在一起,以获得一个最新的分支 在androidstudio(显然使用git命令)中尝试Merge和Rebase工具时,我得到了不同的结果 合并-显示多个文件之间的真实冲突 Rebase-仅显示1个冲突文件 我知道merge和rebase是两个完全不同的命令(rebase更改功能分支的头,并在其上添加新的提交(保留提交历史记录),而merge尝试合并两个分支的头)。但它们返回不同的结果是没有意义的。我是说,冲突就是冲突不?如果用户A
我知道merge和rebase是两个完全不同的命令(rebase更改功能分支的头,并在其上添加新的提交(保留提交历史记录),而merge尝试合并两个分支的头)。但它们返回不同的结果是没有意义的。我是说,冲突就是冲突不?如果用户A和用户B更改了同一行,那么无论您使用合并还是重基,该行始终应该冲突?这可能取决于在分支点之后有多少次提交 如果有多个提交,
git merge
将立即显示所有冲突,git rebase
将显示每个提交的冲突
假设您有这种情况:
master A --- B --- C <- HEAD of master
\
branch --- D --- E <- HEAD of branch
主控A--B--C可能这取决于在分支点之后有多少次提交
如果有多个提交,git merge
将立即显示所有冲突,git rebase
将显示每个提交的冲突
假设您有这种情况:
master A --- B --- C <- HEAD of master
\
branch --- D --- E <- HEAD of branch
主控A--B--C将重基视为相反方向的合并。
如果方向不同,则合并或重新基础自然会在不同的冲突处停止
(这就是为什么在重设基础期间只会看到1个冲突)
重设基础与合并的结果在很大程度上取决于实际更改。如果更改在提交集之间是独立的,则它们应该是相同的
但是,如果任何提交更改了先前提交所更改的内容,则顺序(合并与重基)可能会给出不同的结果/冲突
示例
例如,如果删除一行代码并重新设置基址,并且文件的最后一个版本具有相同的周围行,则该行很可能会被删除而不会出现问题
它所需要的只是“干净地应用”,不管下面发生了什么变化
但是,如果合并并且合并区域中的代码发生了更改,则删除该行可能会与其他更改发生冲突(即使合并提交的“净结果”与您处理的原始提交相同)
解决方法
最好的方法可能是交互式地重新设置基址git-rebase-i master
。通过这种方式,您可以“影响”重基中的更改顺序,以便它们可以干净地应用或导致更少的冲突
通常,您可能只希望在将多个分支的更改集成到一个版本中时使用merge。因此,在功能上,rebase和merge都有“不同的目的”。当您希望将自己的本地更改附加到远程分支时,可以重新设置基础;当您拾取和混合其他人所做的更改时,可以合并
请注意,合并和重基都是“作弊”——它们更改提交的时间线,并且根据顺序的不同,更改可能会产生副作用
(例如,如果一个人删除一行,然后恢复更改…而另一个人只是删除该行…是否应删除该行?)
因此,顺序(重基与合并)很重要。将重基视为相反方向的合并。
如果方向不同,则合并或重新基础自然会在不同的冲突处停止
(这就是为什么在重设基础期间只会看到1个冲突)
重设基础与合并的结果在很大程度上取决于实际更改。如果更改在提交集之间是独立的,则它们应该是相同的
但是,如果任何提交更改了先前提交所更改的内容,则顺序(合并与重基)可能会给出不同的结果/冲突
示例
例如,如果删除一行代码并重新设置基址,并且文件的最后一个版本具有相同的周围行,则该行很可能会被删除而不会出现问题
它所需要的只是“干净地应用”,不管下面发生了什么变化
但是,如果合并并且合并区域中的代码发生了更改,则删除该行可能会与其他更改发生冲突(即使合并提交的“净结果”与您处理的原始提交相同)
解决方法
最好的方法可能是交互式地重新设置基址git-rebase-i master
。通过这种方式,您可以“影响”重基中的更改顺序,以便它们可以干净地应用或导致更少的冲突
通常,您可能只希望在将多个分支的更改集成到一个版本中时使用merge。因此,在功能上,rebase和merge都有“不同的目的”。当您希望将自己的本地更改附加到远程分支时,可以重新设置基础;当您拾取和混合其他人所做的更改时,可以合并
请注意,合并和重基都是“作弊”——它们更改提交的时间线,并且根据顺序的不同,更改可能会产生副作用
(例如,如果一个人删除一行,然后恢复更改…而另一个人只是删除该行…是否应删除该行?)
因此,顺序(重设基础与合并)很重要