Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git Merge和Rebase的不同结果_Git_Android Studio_Git Merge_Git Rebase - Fatal编程技术网

git Merge和Rebase的不同结果

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

Git merge和rebase的目标是相同的,将两个分支重新连接在一起,以获得一个最新的分支

在androidstudio(显然使用git命令)中尝试Merge和Rebase工具时,我得到了不同的结果

合并-显示多个文件之间的真实冲突

Rebase-仅显示1个冲突文件


我知道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都有“不同的目的”。当您希望将自己的本地更改附加到远程分支时,可以重新设置基础;当您拾取和混合其他人所做的更改时,可以合并

请注意,合并和重基都是“作弊”——它们更改提交的时间线,并且根据顺序的不同,更改可能会产生副作用

(例如,如果一个人删除一行,然后恢复更改…而另一个人只是删除该行…是否应删除该行?)

因此,顺序(重设基础与合并)很重要