2017-11-01 13 views
-1

私は5つのコミットを行い、まだプッシュしていませんでした。私は最初のコミットで間違いがあることを発見したので、最初のコミットでファイル名を変更します。試しました。前のコミットのファイル名を変更する方法

git reset --soft HEAD^ 
git reset HEAD path/to/file 
git mv oldName NewName 
git commit --amend 

しかし、これは新しいコミット、以前のコミットでファイル名を変更する方法を作成しますか?

答えて

0

git rebase -i HEAD^^を入力し、次にrを使用してコミットの名前を変更できます。

1

コミットが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のいずれかがファイルにアクセスすると、そのコミットをチェリーピックすると競合が発生します。 BDが名前を変更したファイルに触れているが、CEはそうではないとします。次に、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 
0

私が試したし、機能するソリューション:

git rebase -i HEAD~5 
git mv oldeNAme.ext NEWNAME.ext 
git commit --amend 
git rebase --continue 
関連する問題