- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在过去的几个月里,我一直在多台计算机上亲自处理一个分支。结果是一个很长的历史链,我想在将其 merge 到主分支之前清理它。最终目标是摆脱我在处理服务器代码时经常进行的所有 wip 提交。
这是 gitk 历史可视化的屏幕截图:
这就是我从 master 分支出来的地方。自从我开始这个分支以来,Master 发生了一些变化,但这些变化是不相交的,所以 merge 应该是小菜一碟。我通常的工作流程是重新建立 master 基础,然后压缩 wip 提交。
我尝试执行一个简单的
git rebase -i master
我编辑了对 sqsh 的提交。
一开始似乎不错,但后来失败了,需要我解决冲突。然而,似乎没有什么好的方法可以通过查看差异来解决这个问题。每一部分都使用范围内 undefined variable ,因此我不确定如何解决它们。
我还尝试使用git rebase -i -s recursive -X Theirs master
,这并没有导致冲突,但它改变了修订后分支的HEAD状态(我想以 HEAD 中的最终结果不会改变的方式编辑历史记录)。
我相信这些冲突是由链条中可以看到菱形图案的部分引起的。 (例如,在重新设计的分类器之间......和 merge 分支 iccv)。
<小时/>为了更好地表达我的问题,让 A
="Mergebranch iccv"和 B
="reworked classifiers"引用图像中的示例。其间的提交将是 X
和 Y
。
...
|
|
A
/ \
| X
Y |
\ /
B
|
|
...
我想重写历史,使 A
的状态完全保持原样,并有效地破坏中间表示 X
和 Y
,所以结果历史看起来像这样
...
|
|
A
|
|
B
|
|
...
有没有办法将 A
、X
和 Y
的已解析状态压缩为历史链中间的单个提交像这样?
如果 A
和 B
是提交的 SHAID,是否有一个我可以运行的简单命令(或者可能是一个脚本)来实现我想要的结果?
如果A
是HEAD,我相信我能做到
git reset B
git commit -am "recreating the A state"
创建一个新的头,但是如果A
位于这样的历史链的中间,我该怎么做呢?我想维护它之后的所有节点的历史记录。
最佳答案
首先清理当前工作树,然后运行以下命令:
#initial state
git branch backup thesis4
git checkout -b tmp thesis4
git reset A --hard
git reset B --soft
git commit
git cherry-pick A..thesis4
git checkout thesis4
git reset tmp --hard
git branch -D tmp
S
是 X,Y,A
的压缩。 M'
相当于 M
,N'
相当于 N
。如果您想恢复初始状态,请运行
git checkout thesis4
git reset backup --hard
关于Git:如何将两次提交之间的所有提交压缩为一次提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43815567/
我是一名优秀的程序员,十分优秀!