Git merge testing branch (final commit) to master branch

邮差的信 提交于 2019-11-27 21:26:43

问题


I have created a testing branch. It has a lot of tiny commits to build one feature. At the end of it, I want to take the final completed changes, and put them into the master branch.
The master branch, shouldn't contain the history of the testing branch.
Testing branch will be removed eventually.

What is the best way to achieve this?
Would generating a patch and applying it on master be the best way?
If so, how do I generate/apply the patch?


回答1:


Various approaches are described in "Understanding the Git Workflow":

Short lived work

The vast majority of the time, my cleanup is just a squash merge.

git checkout master
git merge --squash private_feature_branch
git commit -v

Larger work

I decide my change should be broken into smaller changes, so squash is too blunt an instrument. (As a rule of thumb I ask, “Would this be easy to code review?”)

git rebase --interactive master

(not an option in your case, as you mention in your question)

Declaring Branch Bankruptcy

Maybe my feature branch existed for a very long time, and I had to merge several branches into my feature branch to keep it up to date while I work. History is convoluted.
It’s easiest to grab the raw diff create a clean branch.

git checkout master
git checkout -b cleaned_up_branch
git merge --squash private_feature_branch
git reset

I now have a working directory full of my changes and none of the baggage from the previous branch. Now I manually add and commit my changes.




回答2:


You are looking for --squash option of git merge:

--squash --no-squash

Produce the working tree and index state as if a real merge happened (except for the merge information), but do not actually make a commit or move the HEAD, nor record $GIT_DIR/MERGE_HEAD to cause the next git commit command to create a merge commit. This allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus).

With --no-squash perform the merge and commit the result. This option can be used to override --squash.

So git merge --squash test-branch and commit away.

You may also try git merge --no-commit --no-ff test-branch




回答3:


git checkout master
git merge --squash testing-branch

That --squash will put your working set in the state as if all the changes on testing-branch got merged in with master, but won't create any commits. You can then do git commit and all the changes will go in in a single commit.



来源:https://stackoverflow.com/questions/9107861/git-merge-testing-branch-final-commit-to-master-branch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!