私は5つのコミットを行い、まだプッシュしていませんでした。私は最初のコミットで間違いがあることを発見したので、最初のコミットでファイル名を変更します。試しました。前のコミットのファイル名を変更する方法
git reset --soft HEAD^
git reset HEAD path/to/file
git mv oldName NewName
git commit --amend
しかし、これは新しいコミット、以前のコミットでファイル名を変更する方法を作成しますか?
私は5つのコミットを行い、まだプッシュしていませんでした。私は最初のコミットで間違いがあることを発見したので、最初のコミットでファイル名を変更します。試しました。前のコミットのファイル名を変更する方法
git reset --soft HEAD^
git reset HEAD path/to/file
git mv oldName NewName
git commit --amend
しかし、これは新しいコミット、以前のコミットでファイル名を変更する方法を作成しますか?
git rebase -i HEAD^^
を入力し、次にr
を使用してコミットの名前を変更できます。
コミットがA-B-C-D-E
で、A
が最初であるとします。
git reset A --hard
git mv oldName newName
git commit --amend --no-edit
git cherry-pick A..E
5つのコミットのsha1値は新しいものになります。実際には5つの新しいコミットが作成され、ブランチは古いE
から離れて新しいE
を指しています。古いE
が何であるか忘れた場合は、git reflog
を実行して見つけてください。あるいは、あらかじめ古いE
上に新しいブランチを作成し、ジョブが完了した後にそれを削除することもできます。古いE
が何であるか知っていれば、は何を指示するのですか?ABCD
です。
名前が変更される前にBCDE
のいずれかがファイルにアクセスすると、そのコミットをチェリーピックすると競合が発生します。 B
とD
が名前を変更したファイルに触れているが、C
とE
はそうではないとします。次に、git cherry-pick A..E
の代わりに次のコマンドを実行します。
git format-patch -1 B
git format-patch -1 D
#Two *.patch files are created.
#Open and edit the *.patch, change the oldName to the newName in them.
git am <edited-B.patch>
git cherry-pick C
git am <edited-D.patch>
git cherry-pick E
rm *.patch
私が試したし、機能するソリューション:
git rebase -i HEAD~5
git mv oldeNAme.ext NEWNAME.ext
git commit --amend
git rebase --continue