是什么混帐之间的差异合并--ff 和git重置 --mixed
问题描述:
如果我想更新我的本地分支,比方说master
,远程分支gitlab/master
,我看到两个选项:是什么混帐之间的差异合并--ff <commit>和git重置<commit> --mixed
- 我可以使用快进合并将本地分支与远程分支合并。
- 我可以使用重置将我的分支移动到远程分支的位置。
第一个操作可以在我的SmartGit GUI中通过右键单击:merge
来实现。后面的操作可以通过拖动本地分支标记到一个新位置来实现。
git merge --ff <commit>
和git reset <commit> --mixed
之间是否有任何技术差异?
我承认重置也可以用来移动本地分支到另一个分支,这不是快进的方式。
答
如果合并解析为快进,不应该有差别,但是如果不是这种情况:
- 如果使用
git merge
,你将有一个合并提交,所有来自两个支路承诺。 - 如果您使用
git reset
,您将只提交gitlab/master
并且不提交合并。来自master
(gitlab/master
缺席)的提交将被取消(重置),但其内容将出现在工作目录中。
你可以试试这个自己,与follwing 2个scenari:
(初始化,共同两人双双scenari,我们使用master
为gitlab/master
和branch1
为master
)
# Common commit
git init
echo a > a; git add .; git commit -m"a"
# Commit on branch1
git checkout -b branch1
git init
echo b > b; git add .; git commit -m"b"
# Second commit on master
git checkout master~1
echo c > c; git add .; git commit -m"c"
(合并方案)
git checkout branch1
git merge master
(重置场景)
git checkout branch1
git reset master
还请注意,这两个选项--ff
和--mixed
是默认选项,并可以省略。
答
正如你在你自己对Ortomala Lokni's answer的评论中指出的那样,你需要--ff-only
来强制执行一次快进操作。另一个重要的区别是,这种git reset
:
- 总是移动/重新分配
HEAD
(如果--soft
到此为止); - 可选择重置索引(如果
--mixed
在此处停止); - 可选择重置工作树(
--hard
)。
由于您特别要求重置--mixed
,所以此类操作会使工作树与当前提交和索引不同步。一个快速的“合并”(我在这里把引号合并,因为它没有真正进行任何合并)更新工作树。
不是'--ff'执行快进合并,而没有选项允许快进合并或合并提交? – Paebbels
哦,我看到我的错。强制选项是'--ff-only'。 – Paebbels