2013-07-20 2 views
6

をGitはgitのリセット前--softリセットこのリセットアプローチを呼ぶ理由をお勧めします。は、明示的に(--mixed)gitのドキュメント(および多数のSOスレッド)で

$ git reset --soft HEAD^ ;# go back to WIP state <2> 
$ git reset          <3> 

0.2。これにより、WIPコミットがコミット履歴から削除され、作業ツリーがそのスナップショットを作成する直前の状態に設定されます。

.3。この時点では、インデックスファイルにはスナップショットWIPとしてコミットされたすべてのWIP変更が引き続きあります。これにより、インデックスが更新され、WIPファイルはコミットされていないものとして表示されます。

https://www.kernel.org/pub/software/scm/git/docs/git-reset.html

明らかにそれは大丈夫ですが、これらの2つのコマンドは(に相当する)

$ git reset HEAD^ 

置き換えることができるものと思わ

両方リセットする必要があり
$ git reset --mixed HEAD^ 

HEADポインタと直前のコミットのインデックス。実際には、このコマンドの結果と前の2つの結果の間に違いはありますか?そうでない場合は、2段階プロセスを好む理由がありますか?あるいは、ちょうどそれがドキュメントの中で--softの動作を明示的に説明するために行われたのでしょうか?

答えて

5

いいえ、違いはありません。 git reset --soft(つまり、できhave other more practical uses

git reset HEADは "unstaging" のためであり、それはデフォルトのオプションですので、簡単なgit reset HEAD^は、()、、


--mixedの必要性をHEADを移動しないで、とunstageんどちらも、唯一のヘッドを移動させます(あなたは「 wip」を犯しあなただけのバック機能に切り替えて、 - 進行中の作業)をする前に

:ここ

は、それがどのように見えるかを確認するには、簡単なテストである

C:\Users\VonC\prog\git\test\r\r3>gl 
* 6ac95bd - (origin/master, origin/HEAD, master) fix in master (2 minutes ago) <VonC> 
| * fd8d97d - (HEAD, origin/feature, feature) snap WIP (3 minutes ago) <VonC> 
| * 16066dd - f1 (3 minutes ago) <VonC> 
|/ 
* e8ad96f - f1 (3 minutes ago) <VonC> 

リセット自体:

C:\Users\VonC\prog\git\test\r\r3>git reset "HEAD^" 
Unstaged changes after reset: 
M  f 

あなたのステータスを与える:2つの段階でgit reset HEAD^

C:\Users\VonC\prog\git\test\r\r3>gl 
* 6ac95bd - (origin/master, origin/HEAD, master) fix in master (6 minutes ago) <VonC> 
| * fd8d97d - (origin/feature) snap WIP (7 minutes ago) <VonC> 
| * 16066dd - (HEAD, feature) f1 (7 minutes ago) <VonC> 
|/ 
* e8ad96f - f1 (8 minutes ago) <VonC> 

C:\Users\VonC\prog\git\test\r\r3>git st 
# On branch feature 
# Your branch is behind 'origin/feature' by 1 commit, and can be fast-forwarded. 
# (use "git pull" to update your local branch) 
# 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: f 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

ログ、あなたが見ているだろうの後に続くログ:

C:\Users\VonC\prog\git\test\r\r2>gl 
* 6ac95bd - (origin/master, origin/HEAD, master) fix in master (65 seconds ago) <VonC> 
| * fd8d97d - (origin/feature) snap WIP (89 seconds ago) <VonC> 
| * 16066dd - (HEAD, feature) f1 (2 minutes ago) <VonC> 
|/ 
* e8ad96f - f1 (2 minutes ago) <VonC> 

あなたのインデックスがまだwipのために上演されたものを反映します:

C:\Users\VonC\prog\git\test\r\r2>git st 
# On branch feature 
# Your branch is behind 'origin/feature' by 1 commit, and can be fast-forwarded. 
# (use "git pull" to update your local branch) 
# 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: f 
# 

リセットが、その後unstagedでしょう、git reset HEAD^は1つのステップでなければならないよりも、同じステージに戻ってあなたをもたらす:

C:\Users\VonC\prog\git\test\r\r2>git reset 
Unstaged changes after reset: 
M  f 

C:\Users\VonC\prog\git\test\r\r2>git st 
# On branch feature 
# Your branch is behind 'origin/feature' by 1 commit, and can be fast-forwarded. 
# (use "git pull" to update your local branch) 
# 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: f 
# 
no changes added to commit (use "git add" and/or "git commit -a") 
+0

確認していただきありがとうございます。そして確かにgit reset --softの他の用途があります。 (最も基本的なケースでは、単にインデックスをリセットする理由がないこともよくあります。その場合、--softはファイルを再作成する必要がありません)。しかし、2つのとにかくインデックスをリセットする予定がある場合は、段階的なプロセスです。なぜ必要以上の文字を入力するのですか? –

+0

@NathanStretch私は同意します。 (あなたが進めていくべき進化を成し遂げた作業をコミットした場合や、*別々にステージングするべき他の進化*:それからあなたはすべてを止めて、あなたのwipで最初にコミットしたい。 – VonC

関連する問題