[解決済み] 悪いマージを修正し、良いコミットを修正されたマージに再生するにはどうすればよいですか?
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
コマンドの方が、一時的なブランチ名を使用するよりも優れています)。
関連
-
[解決済み】マージが終了していない(MERGE_HEADが存在する)。
-
[解決済み] TortoiseGitで「git did not exit cleanly (exit code 128)」というエラーを解決するには?[クローズド]
-
[解決済み] Git リポジトリからファイルを削除するにはどうすればよいですか?
-
[解決済み] 2 つの Git リポジトリをマージする方法は?
-
[解決済み] 複数のコミットを1つのスクワッシュされたコミットとして別のブランチにマージするにはどうすればよいですか?
-
[解決済み] Gitによるhotfixブランチのfeatureブランチへのマージ
-
[解決済み] 既にリベースを開始している場合、2つのコミットを1つにマージするにはどうすればよいですか?
-
[解決済み] Git リポジトリのコミット履歴から大きなファイルを削除/消去する方法は?
-
[解決済み】Gitで複数のコミットの著者名やコミッター名、Eメールを変更する方法は?
-
[解決済み】Gitのワークフローとrebaseとmergeの質問
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】gitがローカルバージョンをリモートバージョンに置き換える
-
[解決済み】ローカルGitブランチとそのリモートブランチを比較する方法
-
[解決済み】マージが終了していません(MERGE_HEADは存在します)。
-
[解決済み] git: fatal: リモートリポジトリから読み取れませんでした。
-
[解決済み] LFはgitでCRLFに置き換えられます - それは何ですか、そしてそれは重要ですか?[重複]。
-
[解決済み] 複数のコミットをチェリーピックする方法
-
[解決済み] ssh-keygen' は内部コマンドまたは外部コマンドとして認識されません。
-
[解決済み] Gitのエラー「object file ... is empty」はどうすれば直せますか?
-
[解決済み] "fatal: This operation must be run in work tree." というメッセージが表示されるのはなぜですか?
-
[解決済み] Gitのプッシュエラーです。Unable to unlink old (Permission denied)です。