2

私の会社では、最近 git を移動しました。この環境で作業している間に、(ローカル ブランチで) 大量のローカル コミットを作成することになります。コードを最新の状態に保つために、プルを作成します。最終的な結果として、git ログを実行すると、そのログに自分のコミットと他の開発者のコ​​ミットが見つかります。コミットをリモートにプッシュする前に、すべてのローカル コミットを収集し、それらを 1 つのコミットにマージして (ログのノイズを減らすため)、リモートにプッシュしたいと考えています。gitでそれを行うにはどうすればよいですか?

4

3 に答える 3

3

最も簡単な方法は、 agit pullを実行して競合を解決し、すべて最新の状態になったら、ブランチ ポインターを最新のリモート コミット (私はorigin/master.

git reset --soft origin/master
git commit

新しいコミットは、リモートのマスター コミットの上にある単一の新しいコミットとして、すべての変更になります。その後、このコミットをリモートにプッシュできます。git showプッシュする前にコミットを検証するために使用します。

注:masterこれは、1 つの共有ブランチ ( ) からのみプルしたか、プルした他の共有ブランチが既にリモートの にマージされていることを前提としていますmaster

于 2012-10-26T06:53:18.173 に答える
1
git fetch <remote name>
git rebase -i <remote name>/<branch name>

rebase -i(インタラクティブなリベース) の使用方法の詳細については、次のガイドを参照してください。

http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

リベース/スカッシュは、マージ コミットで常にうまく機能するとは限らないことに注意してください。リベースすると、マージしたものの後にコミットが移動することが多いため、マージしたコミットがなくなる可能性があり、問題が発生することはありませんが、マージしたものがリモート ブランチにまだない場合は、気をつけろ。

于 2012-10-26T06:43:49.557 に答える
0

アプローチを変えるべきです。ローカル ブランチでの開発中は、プール (またはフェッチ) を行うべきではありません。むしろ、「メイン」開発ブランチを更新してから、開発ブランチを「メイン」ブランチでリベース (git rebase) してください。

今のところ、あなたが探しているのはgit cherry-pickかもしれません。

また、手動でリセット (git reset --soft) を特定の (開発中の) ブランチの最初のコミットに試行し、次に 1 つのコミットとしてコミットする変更のみを選択することもできます。

ブランチに自分のコミットしかない場合は、問題ははるかに簡単です。それらをスカッシュできます (git squash)。開発ブランチであまり多くのコミットを作成しないためのいくつかの方法は、コミットを修正することでもあります (git ammend)。

于 2012-10-26T06:47:12.387 に答える