57

機能ブランチがマスターに移行する準備ができたときに、機能ブランチを支援する git コマンドを探しています。この git コマンドは、ブランチのすべての変更を master 上の単一のコミットに押しつぶします。私は今日これを行います:

git rebase origin/master
git rebase -i HEAD~4

4 はスカッシュするコミットの数です。ただし、これには、自分が持っているコミットの数を知る必要があります。今日は次のコマンドを実行してこれを行います。

git log HEAD...origin/master

そしてコミットを数えます。

これを行うためのより良い方法があるべきだと感じています。それとも、これは他の誰もが行う方法ですか?

4

3 に答える 3

92

あなたがしなければならないことは次のとおりです。

git checkout feature_branch
git rebase master
git checkout master
git merge --squash feature_branch

言うためのドキュメントとしてgit merge --squash

実際のマージが発生したかのように (マージ情報を除いて) 作業ツリーとインデックスの状態を生成しますが、実際にはコミットを作成したり、HEAD を移動したり、$GIT_DIR/MERGE_HEAD を記録して次の git commit コマンドでマージを作成したりしません。専念。これにより、現在のブランチの上に単一のコミットを作成できます。その効果は、別のブランチをマージするのと同じです (タコの場合はそれ以上)。

その後、git commitすでにステージングされている変更を行うことができます。

于 2012-03-08T22:06:12.033 に答える
16

大規模なチームで働いた多くの経験から集められた、私がしていることは次のとおりです。

# Get latest from master
git checkout master
git pull --rebase

# rebase master into your feature branch
git checkout feature/my-feature
git rebase master --preserve-merges

# merge feature into master
git checkout master

# DO ONLY ONE of the 2 options below
# if you only have one or (maybe) 2 commits in your feature branch
git merge feature/my-feature

# OR
# this forces an empty merge commit (useful if we need to roll things back)
git merge --no-ff feature/my-feature

# if you use Github, this should also close the pull request
git push origin master

お役に立てれば!

于 2014-06-05T14:55:54.890 に答える
2

を探していると思いますgit merge --squash。単一のコミットを作成できるように、機能ブランチからマスターにコミットを取り込み、それらを押しつぶす必要があります。

于 2012-03-08T17:47:37.170 に答える