是什么混帐之间的差异合并--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并且不提交合并。来自mastergitlab/master缺席)的提交将被取消(重置),但其内容将出现在工作目录中。

你可以试试这个自己,与follwing 2个scenari:

(初始化,共同两人双双scenari,我们使用mastergitlab/masterbranch1master

# 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是默认选项,并可以省略。

+0

不是'--ff'执行快进合并,而没有选项允许快进合并或合并提交? – Paebbels

+0

哦,我看到我的错。强制选项是'--ff-only'。 – Paebbels

正如你在你自己对Ortomala Lokni's answer的评论中指出的那样,你需要--ff-only来强制执行一次快进操作。另一个重要的区别是,这种git reset

  1. 总是移动/重新分配HEAD(如果--soft到此为止);
  2. 可选择重置索引(如果--mixed在此处停止);
  3. 可选择重置工作树(--hard)。

由于您特别要求重置--mixed,所以此类操作会使工作树与当前提交和索引不同步。一个快速的“合并”(我在这里把引号合并,因为它没有真正进行任何合并)更新工作树。