16

それで、私がメインブランチを持っているとしましょう、私たちは「マスター」と呼びます。「新機能」というブランチを作成しました。このブランチで大量のコミットを行ったので、時間を遡ることができますが、機能の開発中にかなりの作業を行ったため、コミットログはかなり乱雑になっています。

たとえば、gitdiffmaster..new-featureを見るとしたら。

2つのブランチ間のすべての変更を含む「master」に新しいコミットを1つだけ作成したい場合、それを行うための最も効率的な方法は何ですか?

4

5 に答える 5

38
git checkout master
git merge --squash new-feature
git commit

コミットメッセージは、マージ/スカッシュされているコミットのリスト全体を表示することから始まりますが、もちろん、それを編集して必要なものにすることができます。

于 2013-02-14T22:17:39.540 に答える
6

より適切に機能する可能性のある別のオプションは、 でパッチ ファイルを生成しgit diff --patch > "patch filename"git apply "patch file name".

git-diff のマニュアル ページ (特に「-p を使用したパッチの生成」): http://www.kernel.org/pub/software/scm/git/docs/git-diff.html

git-apply の man ページ: http://www.kernel.org/pub/software/scm/git/docs/git-apply.html

于 2013-02-15T13:25:54.070 に答える
1

これには、インタラクティブなリベースを使用できますgit rebase --interactive。次に、スカッシュオプションを使用します。コミットからの更新のみを使用し、コミットは作成しません。

于 2013-02-14T21:40:22.097 に答える
1

git rebase --interactive HEAD~ を使用します (スカッシュしたいコミットの数に関係なく)。例: git rebase --interactive HEAD~5。これにより、最後の 5 つのコミットが読み込まれ、メッセージを含むエディター ウィンドウが表示されます。各メッセージには、先頭に「pick」が付きます。最後のメッセージに移動し、'pick' を 'squash' に変更して終了します。コミット メッセージを求める新しいウィンドウが開きます。これは、スカッシュ コミットの新しいコミット メッセージになります。終了すると、すべてのコミットが 1 つの新しいコミットに押しつぶされます。

ここに例があります: https://ariejan.net/2011/07/05/git-squash-your-latests-commits-into-one

于 2013-02-14T21:45:11.477 に答える
0

機能ブランチのすべてをコミットしてから、すべての変更に対して「自分のもの」を受け入れるマスターにマージできます。

これを行う方法に関する優れた回答を含むスタック オーバーフローの質問を次に示します。 「git merge -s ours」の「theirs」バージョンはありますか?

于 2013-02-14T21:43:32.083 に答える