我刚刚做了一次git pull --rebase origin master,发生了冲突.
首先,这个冲突是在一个我没有触及的文件中,大约有10个提交回来.为什么会这样?
然后我意外地打字git rebase --skip,它'跳过那个补丁'.
担心我跳过了一个提交,我检查了一个新版本的master分支,并在我做了rebase的分支和新的master分支之间做了一个差异.diff中显示的唯一更改是最新提交,查看日志,"已跳过"的修补程序显示在提交历史记录中.
谁能解释一下这里发生了什么?
kni*_*ttl 51
它做了它所说的,它跳过提交.如果您rebase --abort在同一个rebase期间在稍后的冲突中运行,则跳过的提交当然也将被还原.
如果您的更改已经存在于上游,Git将无法应用您的提交(但通常应该自动跳过它,如果补丁完全相同).将跳过您自己的提交,但更改仍将存在于当前HEAD中,因为它已经应用于上游.
你应该确保你没有删除你的重要更改;)(使用reflog返回到rebase之前的状态)
小智 6
当我知道不应该有任何冲突并且列出的冲突没有任何意义时,我自己经常会遇到这个问题。举个例子,我有几个分支,顺序如下:
A --> B --> C --> D --> E ...
Run Code Online (Sandbox Code Playgroud)
分支 D 中的修改之一是添加一个文件,我意识到在分支 B 中添加该文件更有意义。所以我这样做了
git switch B
git checkout B -- path/to/new/file
git commit --amend --no-edit
Run Code Online (Sandbox Code Playgroud)
然后我做了
git switch C
git rebase B
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但是当我这样做时
git switch D
git rebase C
Run Code Online (Sandbox Code Playgroud)
发生了冲突。我能够手动修复它,但我也发现我可以
git rebase --skip
Run Code Online (Sandbox Code Playgroud)
一切都很好。然后当我这样做的时候
git switch E
git rebase D
Run Code Online (Sandbox Code Playgroud)
同样的冲突也发生了。同样,我可以手动修复它或跳过它,但结果相同。
我仍在努力弄清楚为什么这些冲突有时会发生,以及为什么有时这样做会起作用
git rebase --skip
Run Code Online (Sandbox Code Playgroud)
在这样的情况下。