我有一个 master
分支和两个工作分支,a
和 b
。分支 b
是从与 a
相同的点创建的,但涉及不同的文件(只有一个共享文件,d.py
)。分支 b
刚刚被 pull 入 master
。
(a) F---H-J----L---
/
(master)A--B--C--D--E--------------M
\ /
(b) G----I----K
在我对分支 a
的 pull 请求中,Github 现在说
This branch has conflicts that must be resolved
Use the web editor or the
commandline
to resolve conflicts.Conflicting files
clippy/d.py
我想我可以做显而易见的事情,git pull --rebase master
并最终得到如下所示的历史记录:
F---H-J----L--
/
A--B--C--D--E--------------M
\ /
G----I----K
然后 merge 到master就万事大吉了
F---H-J----L
/ \
A--B--C--D--E--------------M--------------N
\ /
G----I----K
当我尝试 merge 时,这就是我得到的结果
You are currently rebasing branch 'bug/1500/Things' on '1234567'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: apps/a.py
modified: apps/b.py
modified: apps/c.py
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: apps/d.py
而且我认为一切都会很好。但后来我看了一下 a.py
并意识到我所有的更改都来自提交 F
、H
、G
L
消失了。 b.py
、c.py
等也是如此。据我所知,rebase 中唯一的变化是 d.py 中的变化
这是两个分支之间共享的文件。
我中止了 rebase 并再次尝试使用 git rebase master
但同样的事情发生了。
为什么 git 这样做?我怎样才能成功地 rebase 我的提交以 merge 它?
最佳答案
如果master和你的a
有冲突分支,rebase 将在存在冲突的地方停止,并希望您修复它。
首先,要获得分支的原始状态,您可以执行 git rebase --abort
.这将撤消尝试的 rebase 。
如果你还在rebase的中间,你可以做git diff
看看冲突在哪里。你会在冲突文件中看到类似这样的内容
<<<<<<< HEAD
...
=======
....
>>>>>>> branch-a
您可以通过选择要保留的代码并删除 <<<<
来编辑文件以修复冲突。 =====
>>>>>>>
线。
完成文件和冲突的编辑后,您可以运行 git add .
然后 git rebase --continue
. rebase 将继续将您的提交移动到 HEAD
.在任何时候,您可能会或可能不会遇到更多冲突。如果不这样做,您会看到 rebase 成功运行,然后您就可以将更改推送到您的分支。然而,由于您已经重新定位,您将只能执行强制推送,因为您的提交引用将与远程上的引用发生变化。
关于Git rebase 删除最近的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49944913/