時々(それは頻繁に起こります)私は間違いを犯し、プッシュ後に一種の「迅速な修正」を行います。
しかし、コミットを明確にするために、時々私はre forkを作成し(それが私のフォークにあった場合)、すべての変更を再度コミットします。
コミットをマージする方法はありますか?
時々(それは頻繁に起こります)私は間違いを犯し、プッシュ後に一種の「迅速な修正」を行います。
しかし、コミットを明確にするために、時々私はre forkを作成し(それが私のフォークにあった場合)、すべての変更を再度コミットします。
コミットをマージする方法はありますか?
はい、方法があり、それはsquashingと呼ばれます。
git rebase -i sha1_of_the_first_concerened_commit
次に、関連するコミットの下にあるコミットのすべての編集をsquash (またはs ) で置き換え、ファイルを保存し、 でリベースを続けますgit rebase --continue
。
次にプッシュするとき、プッシュはおそらく拒否されるでしょうgit push -f
。
ただし、特定のケースでは、これをすべて実行する必要はありませんcommit --amend
。代わりに使用できます。
コミットしてから、 file1に簡単な修正を加えたとしましょう。ファイルをステージング領域に追加するだけです。
git add file1
それで:
git ci --amend
最後に強制プッシュ:
git push -f
履歴を書き換えるときは注意してください。レポで作業しているのは自分だけである場合や、誰もあなたを引っ張っていないことが確実な場合は問題ありません。そうしないと、他の人にとって苦痛になります。
はい。あなたが調べたいのは ですrebase
。試す
$ git help rebase # and read it
別のオプションはgit commit --amend
。作成しようとしているコミットが現在の HEAD とマージする必要がある場合は、それを修正できます。
これらのオプションは両方とも、履歴を書き換えます。git push -f
そのため、影響を受けるコミットが既にリモート エンドにある場合は、変更を上流に送信する必要があります。
rebaseの簡単な使用例として、5 つのコミットを行ったとします。
A--B--C--D--E
^ initial ^ HEAD
コミット B はコミット A のクイック フィックスで
あり、コミット E はコミット C のクイック フィックスです。
したがって、B を A にマージし、E を C にマージします。
$ git rebase -i HEAD~5
あなたはこれから始めます:
pick A msg
pick B msg
pick C msg
pick D msg
pick E msg
マージするコミットがマージされるコミットの下になるようにコミットを再配置します。つまり、B は A の下 (既にある) で、E は C の下です。
pick A msg
pick B msg
pick C msg
pick E msg
pick D msg
そして、コミットを選択するのではなく、それをつぶすように git に指示します。つまり、上記のものにマージします-または修正します-manページを参照してください。
pick A msg
squash B msg
pick C msg
squah E msg
pick D msg
すべて完了したら、ファイルを保存すると、git がコミットを再配置して押しつぶします。
だから今あなたは持っています:
A'--C'--D