2017-10-15 72 views
2

如果我想更新我的本地分支,比方說master,遠程分支gitlab/master,我看到兩個選項:是什麼混帳之間的差異合併--ff <commit>和git重置<commit> --mixed

  • 我可以使用快進合併將本地分支與遠程分支合併。
  • 我可以使用重置將我的分支移動到遠程分支的位置。

第一個操作可以在我的SmartGit GUI中通過右鍵單擊:merge來實現。後面的操作可以通過拖動本地分支標記到一個新位置來實現。

git merge --ff <commit>git reset <commit> --mixed之間是否有任何技術差異?

我承認重置也可以用來移動本地分支到另一個分支,這不是快進的方式。

回答

2

如果合併解析爲快進,不應該有差別,但是如果不是這種情況:

  • 如果使用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

2

正如你在你自己對Ortomala Lokni's answer的評論中指出的那樣,你需要--ff-only來強制執行一次快進操作。另一個重要的區別是,這種git reset

  1. 總是移動/重新分配HEAD(如果--soft到此爲止);
  2. 可選擇重置索引(如果--mixed在此處停止);
  3. 可選擇重置工作樹(--hard)。

由於您特別要求重置--mixed,所以此類操作會使工作樹與當前提交和索引不同步。一個快速的「合併」(我在這裏把引號合併,因爲它沒有真正進行任何合併)更新工作樹。

相關問題