假设我有这个功能分支"foo".现在我想将它合并回master,但我添加了一些我不想在master中调试的代码.
调试代码在它自己的提交中,所以我可以git cherry-pick
在每次提交时使用并省略此提交.但那会很烦人.
是否有一些"逆樱桃选择"这样做,或互动合并?
CB *_*ley 68
尽管其他SCM使用它的意思,但是git
,它git revert
是一个相反的樱桃选择.
Har*_*erg 53
使用交互式rebase:
git rebase -i SHA-OF-FIRST-COMMIT-IN-BRANCH
Run Code Online (Sandbox Code Playgroud)
这将在你的$ EDITOR中打开这样的东西:
pick 8ac4783 folders and folders
pick cf8b1f5 minor refactor
pick 762b37a Lots of improvement. Folders adn shit.
pick 3fae6e1 Be ready to tableview
pick b174dc0 replace folder collection view w/ table view
pick ef1b65b more finish
pick ecc407f responder chain and whatnot
pick 080a847 play/pause video
pick 6719000 wip: movie fader
pick c5f2933 presentation window fade transition
# Rebase e6f77c8..c5f2933 onto e6f77c8
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Run Code Online (Sandbox Code Playgroud)
所以你要做的只是删除包含调试提交的行,编写文件并关闭你的编辑器,git会告诉你一些事情:
Successfully rebased and updated refs/heads/master.
Run Code Online (Sandbox Code Playgroud)
现在您可以将该分支合并到master.
更新:应该注意的是,改变历史rebase
应该只发生在私人分支上.如果该分支已向公众公开,请git revert
按照其他回答者的建议使用.
另一个想法是添加具有调试代码的恢复提交,并将其合并到主分支中.然后我们删除foo分支中的额外提交.
git checkout foo
git revert COMMIT_REF_WITH_DEBUG_CODE
git checkout master
git merge foo
git checkout foo
git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)
确保您的工作树干净.首先创建恢复的提交.然后将其合并为master.然后将foo分支的分支指针重置为还原提交的父级,使其恢复到原始状态.
如果您不喜欢使用,git reset
那么您可以创建一个临时分支,您可以在其中创建恢复的提交.最后,删除临时分支.
归档时间: |
|
查看次数: |
37777 次 |
最近记录: |