web-dev-qa-db-ja.com

Gitが機能ブランチを別のブランチにリベース(Squashをマージ)します

私はマスターに行くのは、彼らがしている準備ができたときに私の機能ブランチで私を助けるためにgitのコマンドを探しています。これはgitコマンドは、マスターの上に単一のコミットに私の枝上のすべての私の変更を潰すだろう。私は今日これを以下で行います:

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

ここで、4はスカッシュのコミット数です。ただし、これには、コミットの数を知る必要があります。私はこれを今日実行します:

git log HEAD...Origin/master

そして、コミットをカウントします。

これを行うにはもっと良い方法があるはずだと感じています。それとも、他のみんなもそうするのでしょうか?

52
John Hinnegan

あなたがしなければならないのは:

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

docs for git merge --squash いう:

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

その後、git commit既にステージングされている変更。

88
eckes

これは、大規模なチームでの多くの経験から収集したものです。

# 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

お役に立てれば!

14
rupakg

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

2
manojlds