変更をコミットしましたが、変更セットにファイルを追加するのを忘れていました。他のコミットの後、ファイルがHEAD^4
コミットこと。
不足しているファイルを含めるように以前のコミットを書き換えるにはどうすればよいですか?
変更をコミットしましたが、変更セットにファイルを追加するのを忘れていました。他のコミットの後、ファイルがHEAD^4
コミットこと。
不足しているファイルを含めるように以前のコミットを書き換えるにはどうすればよいですか?
回答:
修正したいコミットのオプションを使用git rebase --interactive HEAD~4
して設定しedit
ます。
この方法でリモートリポジトリにプッシュされたコミットを変更しないでください。その場合は、ファイルが不足している新しいコミットを追加することをお勧めします。
git push -f
アップストリームが変更されなかったと確信している場合は、それが可能になりますか?
add
不足しているファイルをすでに削除したので、メッセージとして「xxx」を使用してコミットしました。次に、rebaseコマンドを実行して、「xxx」のコミットを「選択」から「編集」に変更しました。次に、「git rebase --continue」を実行しました。履歴を見ると、最新のコミットとして「xxx」があり、それらを追加したい以前のコミットは変更されていません。私の間違いはどこだったのかしら?
私は人々がググってもっと簡単な答えを見つけるためにここに来ることができることに気づきます:それがちょうど最後のコミットだったとしたら? (OPの質問は、履歴の4番目のコミットを修正することです)
コミットしてすぐにファイルを追加するのを忘れた場合は、次のようにしてください:
# edited file-that-i-remember.txt
git add file-that-i-remember.txt
git commit
# realize you forgot a file
git add file-that-i-forgot.txt
git commit --amend --no-edit
どこ --no-edit
同じコミットメッセージをに保管する。
かんたん簡単!
HEAD^4
。参照用の補遺と同じように、問題ありません。;)
これらの4つのコミットをプッシュしていない場合は、次のように実行できます。
これらすべてのコミットのパッチファイルを作成します。
git format-patch -4
4コミット分巻き戻します。
git reset --hard HEAD~4
不足しているファイルを追加:
git add missing-file
コミットする--amend
:
git commit --amend
保存したすべてのパッチを元に戻します。
git am *.patch
プッシュした場合は、このメソッドを使用しないでください。代わりに、あなたの失敗を認めて、この問題を修正するHEADの上にもう1つのコミットを作成してください。
git format-patch
/ git am
より良いです。最も重要なのは、何かを台無しにした場合の信頼性が高まることです。物理ファイルにパッチとして保存されたコミットは、最善の安全策です。
git gc
:)
rm *.patch
)
受け入れられた答えは正しいですが、リベースプロセス中にコミットの編集を実行する方法に関する詳細な説明が欠けています。
まず、リベースプロセスを開始します。
git rebase --interactive HEAD~4
コミットのリストが表示されるので、単語pick
を変更して編集するコミットを選択しedit
、ファイルを保存します。
コードに必要な変更を加えます(git add
新しいファイルを呼び出すことを忘れないでください)
すべての変更が完了したら、発行しますgit commit --amend
-これにより、次のようにマークされたコミットが修正されますedit
git rebase --continue
プロセスを完了する呼び出しを実行します(としてマークされているコミットがさらにある場合edit
、上記の手順を繰り返す必要があります)
重要なメモ:
pick
編集したくない行は削除せず、そのままにしておきます。これらの行を削除すると、関連するコミットが削除されます
GITはあなたに stash
作業ディレクトリがクリーンでない場合、前に。ただしgit stash pop / git stash apply
、リベース中にこれらの変更(つまり、リベースプロセスを開始する前に隠された変更)を、次のようにマークされたコミットに修正することができます。edit
問題が発生し、リベースプロセス中に行われた変更を完了する前に元に戻したい場合(つまり、リベースを開始する前の時点に戻したい場合)は、次git rebase --abort
も使用します。 --abort doesnの」の場合、対話型リベースを中止する方法働く?
受け入れられた答えで述べたように:
この方法でリモートリポジトリにプッシュされたコミットを変更しないでください。その場合は、ファイルが不足している新しいコミットを追加することをお勧めします。
理由は、Gitブックにあります(「リベースの危険」というタイトルの段落」)にあります。
リポジトリの外部に存在するコミットをリベースしないでください。
そのガイドラインに従えば、大丈夫です。そうしないと、人々はあなたを憎み、あなたは友人や家族に軽蔑されるでしょう。
何かをリベースするときは、既存のコミットを破棄し、似ているが異なるコミットを新しく作成します。コミットをどこかにプッシュし、他のユーザーがそれらをプルダウンして作業をベースにし、その後それらのコミットをgit rebaseで書き直して再度プッシュすると、共同編集者は作業を再マージする必要があり、しようとすると事態が複雑になります彼らの仕事をあなたのものに戻しなさい。
[...]