[解決済み] Git でのファイル名変更の扱い
質問
を読んだことがあります。 Git でファイル名を変更する 変更をコミットし、リネームを実行した後、リネームしたファイルをステージングする必要があります。Git はそのファイルを新しい未追跡ファイルとして見るのではなく、内容から認識し、変更履歴を保持します。
しかし、今夜はこれだけでは、結局
git mv
.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
でスタイルシートの名前を変更しました。
ファインダー
から
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 ファイルをひとつ削除し、新しいファイルを追加したと考えているのです。これは私が望んでいることではありません。リネームを元に戻して、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
マニュアルページ
は言う。
正常に終了すると、インデックスが更新されます。 [...]
そのため、最初は自分でインデックスを更新する必要があります。
(を使用して)。
git add mobile.css
). しかし
git status
は、依然として2つの異なるファイルを表示します。
$ git status
# On branch master
warning: LF will be replaced by CRLF in index.html
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
# new file: mobile.css
#
# 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: iphone.css
#
を実行することで、異なる出力を得ることができます。
git commit --dry-run -a
という結果になります。
を期待します。
Tanascius@H181 /d/temp/blo (master)
$ git commit --dry-run -a
# On branch master
warning: LF will be replaced by CRLF in index.html
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
# renamed: iphone.css -> mobile.css
#
なぜ、このような違いが出てくるのか、その理由を正確に説明することはできませんが
の間に
git status
と
git commit --dry-run -a
しかし
以下は
Linusからのヒント
:
git は本当に何もしません。 気遣い については 内部的にリネームの検出が可能であり、コミットする際に リネームを行ったことは、そのリネームとは全く関係なく に使用するヒューリスティック 見せる リネームができる。
A
dry-run
は実際のリネームメカニズムを使用するのに対し
git status
おそらく、そうではないでしょう。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] 単一ファイルのハードリセット
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】fatal: 有効なオブジェクト名ではない: 'master'
-
[解決済み】Githubエンタープライズ - リモート。Git の操作でパスワード認証が利用できない
-
gitコミット発生 ! [リモート拒否] master -> master (pre-receive hook declined) 解決策
-
[解決済み] git: fatal: リモートリポジトリから読み取れませんでした。
-
[解決済み] GIT_DISCOVERY_ACROSS_FILESYSTEM が設定されていない。
-
[解決済み] git status に fatal: bad object HEAD と表示される。
-
[解決済み] 警告: リモート HEAD は存在しない参照元を参照しているため、チェックアウトできません。
-
[解決済み] fatal: bad revision "とはどういう意味ですか?
-
[解決済み] git add -A」と「git add .」の違い。
-
[解決済み] 削除されたファイルの履歴を確認する