gitでファイルの名前を変更するときは、変更をコミットし、名前を変更してから、名前を変更したファイルをステージングする必要があると読みました。Gitは、ファイルを新しい追跡されていないファイルではなく、コンテンツから認識し、変更履歴を保持します。
しかし、今夜これを行うだけで、に戻ってしまいましたgit mv
。
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Finderでスタイルシートの名前をからに変更iphone.css
しますmobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: css/iphone.css
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# css/mobile.css
したがって、gitは、CSSファイルを1つ削除して、新しいファイルを追加したと考えます。私が望むものではなく、名前の変更を元に戻してgitに処理を任せます。
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
私が始めたところに戻ります。
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
git mv
代わりに使用してみましょう。
> $ git mv css/iphone.css css/mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: css/iphone.css -> css/mobile.css
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
私たちは元気です。では、Finderを使用したときに、Gitが名前の変更を初めて認識しなかったのはなぜですか?
git mv old new
インデックスを自動的に更新します。あなたはGitリポジトリの外の名前を変更すると、あなたは何をする必要がありますgit add new
し、git rm old
インデックスへの変更をステージングします。これgit status
を実行すると、期待どおりに動作します。
public_html
gitで追跡されている多数のファイルをdirに移動しました。とを実行git add .
したgit commit
後も、「削除」された一連のファイルがまだ表示されていましたgit status
。私はaを実行しgit commit -a
、削除はコミットされましたが、今は、public_html
現在住んでいるファイルの履歴がありません。このワークフローは、私が望むほどスムーズではありません。
add+rm
またはmv
、同じ結果が得られます。次に、Gitは名前変更/コピー検出を使用して、名前が変更されたことを通知します。あなたが引用した出典も不正確です。同じcommitで変更と名前の変更を行うかどうかは関係ありません。変更と名前変更の両方でdiffを実行すると、名前変更検出はそれを名前変更+変更として認識します。または、変更が完全な書き換えである場合は、追加および削除として表示されます-実行方法には関係ありません。それ。