2017-12-07 14 views
0

git resetについて2件の陳述がありますが、Gitがどのように機能するかについての限られた知識があるので、私はそれらが矛盾していることがわかります。gitは<filename>をどのようにリセットしますか?

2つのステートメントを照合する方法はありますか?

ステートメント1: Git reset file1は、ステージング領域からファイル1を削除します。

ファイル1をステージングに追加し、ステージング領域から削除したい場合に使用するコマンドです。

ステートメント2: Git reset file1は、HEADからステージング領域にファイルをコピーします。

ステートメント2に従って、git resetは、ファイルをステージング領域に追加します。

HEADからファイルをコピーすると、ステージング領域からファイルがどのように削除されますか?

+2

私はこれら2つのステートメントをどこで読んでいるのかわかりませんが、[git-reset' documentation](https:// git -scm.com/docs/git-reset)は明らかです。 – larsks

答えて

2

HEADは、現在のブランチのヘッド、つまり最新のコミットを参照します。ファイルを変更すると、作業コピーのファイルがHEADと異なります。その違いをステージングするということは、作業コピーからステージング領域にファイルをコピーすることを意味します。

ステージング解除とは、ステージング領域からHEADとの差分を削除することです。したがって、ステージ解除は、HEADから状態をステージング領域にコピーすることによって行われます。

+0

これは、ファイルを削除するのではなく、違いを削除することです。ステージングエリアに修正された追跡ファイルを追加する前に、すでにそこにはありますか?それは最後のコミットからそこにとどまる? –

+1

変更をコミットすると、ステージング領域がリポジトリのツリーに書き込まれ、その新しいツリーを参照するコミットが作成されます。その後、ステージング領域はそのまま維持されます。したがって、状態は最後のコミットのままです。 – mmlr

+0

さらに、HEADを変更する(git checkoutを使ってブランチを切り替える)ことは、最初にインデックスをそのコミットの状態に更新することと考えることができます([git read-tree](https://git-scm.com/docs参照)/git-read-tree))、作業コピーに相違点を適用します([git checkout-index](https://git-scm.com/docs/git-checkout-index)参照)。この場合、ステージング領域には最新のコミットの状態も含まれます。 – mmlr

1

gitリセットはどのように機能しますか?私たちは、だから今octodogは家族の一員、octocatであることを私たちの家族に octodog.txt octofamily

git add octofamily/octodog.txtcode 

を追加

- :

は例をみましょう(私たちの以前のファイル)はすべて落ち込んでいます。

我々はoctodogより octocat以上を愛しているので、私たちは、あなたがのgit resetコマンドを使用してファイルをunstageでき

をoctodog.txt削除によって周りに彼のしかめ面を回します。 octofamily/octodog.txtを削除してください。

git reset octofamily/octodog.txt 

gitのリセットは octodog.txt をunstagingの素晴らしい仕事をしたが、あなたは彼がそこにまだあることに気づくでしょう。彼はもう舞台に立っていません。オクトードッグがやって来てパーティーが壊れてしまう前の状態に戻ることができれば素晴らしいだろう。

git checkout -- <target>

先に行くと、すべての変更を取り除く最後はoctocatのコミット以降:

ファイルが戻って、彼らは最後のコマンドを使用して、コミットされたかに変更することができます。さらに、基準とGitの知識here is one git game

ため

git checkout -- octocat.txt 

TXT

あなたのすべてのgit関連の疑いをクリアすることを願って:)

関連する問題