git - 有没有办法在 pull request git 中包含旧的提交?
问题描述
所以我搞砸了一点,在审查之前将我的一些更改推送到 master 中。为了修复它,我将合并后的版本拆分到自己的分支中,然后再次签出 master,还原它,然后将其推回。
我现在希望人们审查我的代码,但在 PR 中它只包括我在拆分两个分支后所做的更改,而不是我所做的原始更改。我意识到这有点令人困惑,所以我做了一张照片:
.
基本上,我希望将 'd' 拉入 'c',但 Git 只识别与 'd' 的区别,即使在 'b' 中所做的更改应该包含在 'd' 中并且不是 ' C'。
你知道我如何让 git 认识到还有其他差异吗?
编辑:澄清一下,“revert the revert”不起作用,因为我希望差异显示在拉取请求中,而不仅仅是成功合并。
解决方案
出现问题是因为就 git 而言,b
它已经存在master
(以及最近发生的 undo 更改b
)。这不仅会干扰审查,还会干扰实际的合并结果。
有几种常用的技术可以解决这个问题。有时你“revert the revert”;有时您复制B
以创建与B'
执行相同操作B
但在拓扑上“已经在master
.”中的新提交。
在你的情况下,你想要后者。(“revert the revert”的唯一干净方法是 on master
,这将再次绕过审查。您希望更改B
反映在您的分支上。)
所以你有了
... a -- b -- d <--(your_branch)
\
!b <--(master)
(我c
已从您的图片重命名为!b
以更好地描述它是什么 - 恢复b
。)
您需要一些解析为a
.
这可能是提交哈希
a
(或提交哈希的缩写形式);如果您有可用的,我会使用它。或者,在此示例中,您可以使用
your_branch~2
becauseyour_branch
has 2 commits aftera
(那些是b
andd
)。如果你不确定有多少次提交
your_branch
,你可以使用类似的东西$(git merge-base your_branch master)^
(注意^
最后的)。这取决于b
您的分支和主分支的共同祖先这一事实,但如果两个分支之间有任何以后的合并,则会失败。
无论如何,无论您想出什么表达式,我都会a
在以下命令中用作占位符。所以你会做一个“强制变基” your_branch
。
git rebase -f a your_branch
这应该给你
d
/
a -- b -- !b <--(master)
\
b' -- d' <--(your_branch)
(我仍然在此图中显示原始d
提交,但默认的 git 输出将不再显示它,因为它无法访问。一段时间后,它将被垃圾收集器删除。 b'
就像b
除了它无法访问之外master
; 并且d'
是就像d
除了它的父母是b'
.
这是对 的历史重写your_branch
,因此鉴于您之前已经push
编辑过,your_branch
您现在必须强制推送它 ( git push --force-with-lease
)。如果有其他人fetch
编辑过的机会your_branch
——尤其是如果他们可能已经基于它进行了工作——那么你需要与他们就你正在做的事情进行沟通。(请参阅git rebase
“从上游变基中恢复”下的文档。)(如果这可能是一个问题,您可以通过创建一个从未被push
编辑过的新分支来避免此问题,并对其进行变基而不是直接变基your_branch
。)
完成此操作后,您应该能够执行拉取请求。
推荐阅读
- java - Spring Security:检查 Freemarker 模板中的用户角色
- python - 树莓派上的python3
- c++ - (C++) 将对象向量传递给构造函数
- html - 背景在移动设备上显示不正确
- mysql - 使用干预/图像通过 Laravel API 上传/调整大小
- loops - 编写一个程序,打印以下内容: 100 99 98 ... 0 99 98 97 ... 0 一直到 3 2 1 0 ... 2 1 0 ...1 0... 0 在处理中
- python - UsersConfig() 函数中的 ready() 函数是什么?
- node.js - eggjs的命令行功能
- angular - 在 Digitalocean 混乱中使用 express 和 mongo db 部署 Angular 2 应用程序
- sapui5 - 限制 SAPUI5 应用程序中内部页面的直接访问