1. ホーム
  2. git

[解決済み] 悪いマージを修正し、良いコミットを修正されたマージに再生するにはどうすればよいですか?

2022-03-22 18:11:07

質問

誤って不要なファイルをコミットしてしまった( filename.orig を解決している間)、数コミット前に私のリポジトリに、私は今までそれに気づかないままでした。私はリポジトリの履歴からそのファイルを完全に削除したいのです。

変更履歴を以下のように書き換えることは可能ですか? filename.orig はそもそもリポジトリに追加されなかったのですか?

解決方法は?

質問に書かれているような状況でない場合は、このレシピを使用しないでください。このレシピは、悪いマージを修正し、良いコミットを修正されたマージに再生するためのものです。

とはいえ filter-branch はあなたの望むことをやってくれますが、これはかなり複雑なコマンドなので、私ならこれを git rebase . 個人的な好みでしょうけど。 filter-branch は1つの少し複雑なコマンドでできるのに対して rebase のソリューションは、同等の論理演算を一度に一段階ずつ実行するものです。

次のレシピを試してみてください。

# create and check out a temporary branch at the location of the bad merge
git checkout -b tmpfix <sha1-of-merge>

# remove the incorrectly added file
git rm somefile.orig

# commit the amended merge
git commit --amend

# go back to the master branch
git checkout master

# replant the master branch onto the corrected merge
git rebase tmpfix

# delete the temporary branch
git branch -d tmpfix

(実際には一時的なブランチは必要なく、'detached HEAD'でこれを行うことができることに注意しましょう。 git commit --amend ステップに供給するために git rebase コマンドの方が、一時的なブランチ名を使用するよりも優れています)。