5

Git リポジトリ構造が次のようになっている場合:

master: A-C
dev:     \B-D-E

開発ブランチをマスターにマージして、開発ブランチのすべてのコミットで見つかったすべての変更を含むコミットを 1 つだけマスターに追加することは可能ですか? したがって、上記の構造は次のようにマージされます。

master: A-C-E'

E'コミットには、開発ブランチからのすべての変更と最新のコミット メッセージのみが含まれ、新しい機能が 1 つのきちんとしたコミットで master に追加されます。

これはGitで可能ですか?私の開発ブランチには、未完成で洗練されておらず、人間が消費するのにふさわしくない初期のコミットが含まれていることが多いため、GitHub リポジトリの履歴を整理できるようにしたいと考えています。

4

2 に答える 2

4

マージ部分は簡単なはずです (「How to use git-merge --squash?」を参照):

git checkout master
git merge --squash dev

ただし、コミット メッセージを調整する必要がある場合があります。

git commit --amend -m "<commit message from E>"

マージを行うときは他のオプションがあります

于 2015-05-24T10:57:06.410 に答える
1

マージではありませんが、これを達成できます。(覚えておいてください: マージ コミットには 2 つ以上の親があります。E'ただし、親は 1 つだけです: C.)

git rebase -i master dev
  • テキストエディタが開きます。最初の行を除くすべてを に変更picksquash、ファイルを保存してエディターを閉じます。
  • テキストエディタが開きます。(別のコンテンツが入力されています。) 目的のコミット メッセージになるようにそのコンテンツを編集しE'、ファイルを保存してエディターを閉じます。

それで

git checkout master
git merge dev --ff-only
git branch -d dev
于 2015-05-24T11:19:08.760 に答える