問題タブ [git-squash]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - Git - スカッシュ後に中間コミットを回復する
複数のコミットを 1 つのコミットにまとめました。スカッシュ前のコミットの 1 つにデバッグ プリントが含まれており、それと一緒にスカッシュされた後のコミットでそれらのプリントが削除されました。それらを回復する方法はありますか?
git - 機能ブランチへのコミットを押しつぶし、マスターにクリーン マージを戻すことができません。
わかりましたので、一連のコミットを押しつぶすことで少し問題が発生しました。これから回復する方法があるかどうかを知りたいです。これが何が起こったのかです。
出発点は次のとおりです。
両方のブランチで作業が行われました。
master
からへの変更をマージしましたmybranch
(残念ながらここで押しつぶされたため、B、C、G、および H は単一のコミット H' on に結合されましたmybranch
):
両方のブランチで作業が行われました。
mybranch
そして今、からの変更を元にマージしたいのですmaster
が、同じファイルが両方によって変更されたという大量の競合が発生しています。
mybranch
からへのクリーンなマージを行うために今できることについて何か提案はありmaster
ますか?
更新 1
ここに出力がありますgit log
git - 競合に陥ることなく git の履歴全体を書き換える (押しつぶしたり、言い換えたりする) にはどうすればよいですか?
私は約 5000 件のコミット (マージを含む) を持つコード ベースに取り組んでいます。インタラクティブなリベースを開始して、同様のコミットを押しつぶし、弱いコミット メッセージを言い換えました。その前に、この記事に続いていくつかの大きなファイルを削除しました。
それでも、7回目のコミットから競合が発生し、コミットごとに競合が大きくなります。競合する変更を発生させない操作のみを行う方法はありますか?
次のコマンドを使用します。
git - 最新のコミットを特定の以前のコミットに押しつぶすことはできますか?
たとえば、コミット atHEAD
を commitに押しつぶしたい場合HEAD~4
、それを実行できるオプションがあります。
- からのコミットをリセット
HEAD
するHEAD~3
- 古い HEAD と同じ変更を加えた一時的なコミットを作成します (たとえば、
temp
) - ステージングされた/ステージングされていない他の変更を隠す
temp
私たちの古いものでつぶすHEAD~4
- 隠した変更をポップする
- 古いコミット (
HEAD~3
へHEAD
) として再度コミットをビルドします。
同じことを行うための他のより高速で便利な方法はありますか?
git - GitHub で PR を master にマージ + スカッシュした後、git dev ブランチを同期する方法は?
したがって、GitHubには、PR のコミットをマージ + スカッシュする機能があります。
dev
->からコードを PR するプロセスに従いますmaster
。
以前は、PR を単に 'マージ' していましたが、それによって " Merge Pull Request #1 from foo/bar
" という新しいコミットが生成されます。:( ブー...
Squash Commits
だから私はGHで新しいことを試してみようと思った. これにより、以前のすべてのコミットが押しつぶされた新しいコミットが作成されました。わかりました、これまでのところとても良いです。
それから私は自分のブランチ (私の開発者マシン上) に戻りましたdev
.. プルダウンupstream/master
(ここで PR と squash-merge が行われました))すると、私のローカル履歴に別のコミットが追加されました! 「ああ..うわー.あなたはラインから外れています..同期しましょう」には行きませんでした。マージしただけです。
したがって、Squash+Merge ボタンは 4 つのコミットを押しつぶし、それを 1 つに置き換えました...upstream/master
私のローカルホスト マシンのプルには、まだ 4 つのコミットがあり、PR が実行した Squashed-commit と、新しいコミット " Merge branch master .. blah ... noise ..spam
" commit :( : ( :(
ブランチが適切に同期されていることを確認するために、マージスカッシュが発生した後に実行する必要がある特別なトリック/ワークフローはありますか? dev
.. 同様に、ローカルホストにプルダウンして (新しく作成された)ブランチに戻すdev
前に、誰もがローカルホスト ブランチを削除するだけですか?upstream/master
dev
覚えておいてください: ここでの目標は、くだらない "Merge Pull Request #2.."マージ バブルメッセージを回避することです。
それとも、GitHubがこれを行う方法を学ぶまで、当面の間、CLI経由でこれを行うだけですか:(
git - プッシュされた後に特定のコミットを削除して git 履歴をクリーンアップする方法は?
私がやろうとしていること:
機能を完成させました。
それから、私はいくつかのことを見逃していることに気づきました。
今、私の履歴は次のようになります。
私はそれを次のようにしたい:
すべてのmissed something
コミットがコミットにマージされfeature A complete
ます。
正しい方法であることはわかってgit rebase -i HEAD~4
いますが、実際には悪いコミットを削除して履歴をクリーンアップするわけではありません。
他の記事でgit commit --fixup
コマンドとがあることに気付きましたgit rebase -i --autosquash
が、正しく動作していません。これはとても簡単だと思います。今日はこれで終わりです。
git - rebase -i を実行する開始点を見つける
私はブランチ(もちろんマスターのフォーク)で作業しており、一連のコミットがあります。
ブランチが開始された場所であり、マスターの一部であるコミットがどのコミットであるかを正確に見つけることに興味があります。
なぜこれが必要なのですか?
インタラクティブなリベースですべてのコミットを押しつぶしたいのですが、渡すコミットを手動でカウントする代わりに、リベース コマンドに何を渡すかを簡単に把握する方法があるかどうか疑問に思っていました。HEAD~52
git - Git スカッシュがブランチの途中でコミットする
前後のコミットを変更せずに、ブランチの途中でいくつかのコミットをまとめて押しつぶしたい。
私は持っている :
私はそれをつぶしたい
H
と同等ですB -- C -- D
。そして、のコミットメッセージを指定できるようにしたいH
。A
プッシュされた最後のコミットであるため、その後のすべてのコミットは、サーバーを台無しにすることなく書き換えることができます。アイデアは、早送りする前に履歴をクリーンアップすることですmaster
。
どうやってやるの ?
PS: 私の場合、実際には途中でスカッシュするコミットが 3 つ以上あることに注意してください。
PPS: また、可能であれば、 と が変更されない (主にコミット日に関して) ソリューションを希望E
しF
ますG
。
git - GIT - コミットをスカッシュできません: 致命的: 単一のリビジョンが必要です
最後の 2 つのコミットを git でつぶそうとしています。この例では、develop という別のブランチからブランチを作成し、3 つの新しいコミットを作成しました。これが git log です。
したがって、コミット #3 とコミット #2 を 1 つのコミットに押しつぶしたいので、試してみます。
そして、私はこのエラーが発生します:
私が行った場合 :
正常に動作しますが、3 つのコミットすべてを押しつぶしたくはありません。最新の 2 つだけが必要です。十分なコミットがない場合にこのエラーが表示されることを読みましたが、確実に ¯_(ツ)_/¯