- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一堆分支,每个分支都有不同的功能。通常我会有一些额外的分支“not_master”,其中包含 master+feature A,如下所示:
(not_master) a--b--c--d--e---M--x--y--z
(feature A) --h--i--j-/
有时我想取消 merge 功能 A,但在“not_master”中保留提交 x,y,z
。
换句话说,我想要这样:
(not_master) a--b--c--d--e--x--y--z
我看到我可以做一个 git revert -m 1 M
,它会在最后添加一个提交来恢复我的更改,但我真的不想这样做,因为这些提交避风港尚未发布,因此添加更多提交会使历史更难阅读。
其他人建议只执行 git reset --hard M
,但这会转储 x,y,z
的更改。我只是在以完全错误的方式思考这个问题吗?我应该只 git reset --hard M
和 cherry pick x,y,z 吗?
最佳答案
git rebase
会做你想做的。 git rebase -i <commit e>
应该工作:它会打开一个编辑器,你删除 merge 提交并保存。
您还应该能够直接指定将 x..z rebase 到 e,但是整理命令行的语义有点麻烦。如果我正确阅读手册页,它应该是 git rebase --onto <commit e> <commit M> not_master
.
编辑:经过测试并且似乎有效:
mkdir foo; cd foo
git init
touch initial
git add initial
git commit -m 'initial'
git checkout -b topic
touch topic
git add topic
git commit -m 'topic'
git checkout master
touch master
git add master
git commit -m 'master'
git tag pre_merge
git merge topic
git tag merge
touch post_topic
git add post_topic
git commit -m 'post topic'
git rebase --onto pre_merge merge master
历史上的结果
initial -- master -- post topic (master)
\
\-- topic (topic)
关于git - 撤消 Git merge ,但保留后来的更改,并重写历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4798344/
我有一个存储库,其中包含我通过在本地主机上运行服务器进行测试的代码。标准程序是启动 Apache-Tomcat-7,使用 Maven 重新构建项目并进行部署。 经过一段时间的编码,我决定 git st
我是一名优秀的程序员,十分优秀!