0

このようにファイルを削除すると

git rm file_name.ext

これらの変更をコミットする必要がありますか? なんで?

コミットする必要がある場合、このようにしますか?

git commit . -m "Delete file_name.txt"

これが私が尋ねた理由です: Git のステージング インデックスに間違ったファイルを追加しました

git add wrong_file.txt

だから私はそれを削除しました

git reset HEAD wrong_file.txt

しかし、その後、私はこのメッセージに気づきました

$ git reset HEAD wrong_file.txt
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    test2.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       wrong_file.txt
$

正しいファイルをステージング インデックスに追加すると、削除した test2.txt ファイルの名前が right_file.txt に変更されていることに気付きました。

$ touch right_file.txt &&  git add right_file.txt
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    test2.txt -> right_file.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       wrong_file.txt
$
4

1 に答える 1

1

最短の答え:「はい」。あなたgit commitの変更は、インデックス (ステージング領域) にのみ保存されます。このcommit操作は、ステージングされたすべての変更を取得し、それらすべてを含む新しい単一のコミットを作成し、それらを「永久に」保持します (いわゆる「履歴を書き換える」ことを行わない限り)。

からの「名前変更」メッセージgit statusは、削除するファイルと追加するファイルの比較に基づいています。内容が一致する場合、git はstatus、ファイルを削除して別のファイルを追加するのではなく、ファイルの名前を変更したに違いないと (出力で) 想定します。例えば:

$ mkdir t; cd t; git init; git commit --allow-empty -m initial
Initialized empty Git repository in ...
[master (root-commit) bca9d63] initial
$ $ echo 'file contents' > somefile
$ git add somefile && git commit -m c1
[master c37af4b] c1
 1 file changed, 1 insertion(+)
 create mode 100644 somefile

これで、最初の空のコミットと "c1" ( c37af4b) を含むsomefile.

$ git rm somefile
rm 'somefile'
$ echo 'file contents' > newfile
$ git add newfile

新しいファイルを削除somefileして作成しましたが、その内容は削除したファイルとまったく同じであるため、これgit statusを検出します。

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    somefile -> newfile
#

を行うと、git commitもはや持ってsomefileいないが持っているリビジョンができますnewfile。またgit diff、ファイルがまったく同じに見えることを検出し、名前を変更したと想定します。

$ git commit -m c2
[master a85cea2] c2
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename somefile => newfile (100%)
$ git diff HEAD^
diff --git a/somefile b/newfile
similarity index 100%
rename from somefile
rename to newfile

ステージング エリア (別名インデックス) は、配置が気に入るまで配置する場所です。次にcommit、そのアレンジメントのコピーをフリーズして、永久に利用できるようにします。あなたまでcommit、gitはあなたがまだ満足していないと想定しています。 git status現在のステージ配置をHEADコミットと比較し、違いをまとめます*。何回追加、削除、または移動したかは問題ではなく、単に「ステージが現在どのように見えるか」と「どのように見えるか」を比較するだけです最後のフリーズで」。

[*また、ステージを作業ディレクトリと比較し、その違いを「コミットのためにステージングされていない変更」および/または「追跡されていないファイル」として要約します。

于 2013-08-29T21:45:30.683 に答える