解决合并冲突后,Git rebase陷入困境

时间:2014-02-17 15:43:26

标签: git

我正在运行一个碰撞冲突的基础:

$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: Better `SelectMotifsView.js`
Using index info to reconstruct a base tree...
M       browser/AddLinkView.js
M       browser/SelectMotifsView.js
M       browser/index.html
Falling back to patching base and 3-way merge...
Auto-merging browser/index.html
CONFLICT (content): Merge conflict in browser/index.html
Failed to merge in the changes.
Patch failed at 0001 Better `SelectMotifsView.js`
The copy of the patch that failed is found in:
   /Users/dmitry/dev/links/.git/rebase-apply/patch

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

没什么大不了的 - 我做了一个我知道会引起冲突的小改变:

diff --cc browser/index.html
index ba9c4f3,4c2a1c2..0000000
--- a/browser/index.html
+++ b/browser/index.html
@@@ -40,6 -40,7 +40,10 @@@
              <label>
                  <%= label %>
                  <select class="form-control" name="motif">
++<<<<<<< HEAD
++=======
+                     <% console.log(exclude); %>
++>>>>>>> Better `SelectMotifsView.js`
                      <% motifs.each(function(motif) { if (!exclude || exclude.indexOf(motif) < 0) { %>
                          <option value="<%= motif.get('id') %>"><%= motif.get('name') %></option>
                      <% } }); %>

我想保留HEAD的版本,这是空的,所以我进入并删除整个版本:

++<<<<<<< HEAD
++=======
+                     <% console.log(exclude); %>
++>>>>>>> Better `SelectMotifsView.js` 

我保存文件browser/index.html,然后保存git add browser/index.html

$ git add browser/index.html
$ git rebase --continue

但是:

Applying: Better `SelectMotifsView.js`
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

之前从未见过...... git status显示没有剩余未解决的路径。该怎么办?我读了其他相关问题,这可能是--skip的一个很好用,但这似乎不是一个空提交。或者我错了吗?

2 个答案:

答案 0 :(得分:4)

看起来补丁是空的,所以你可以安全地跳过它,就像git建议的那样:

$ git rebase --skip

答案 1 :(得分:4)

git rebase被困在&#34; rebase循环中的一个可能原因&#34;是git gc 这已在git 2.7.1 (February 6th, 2016)

中修复

commit 8c24f5bJeff King (peff)(2016年1月13日) Junio C Hamano -- gitster --于2016年1月26日commit eefc461合并)

  

rebase:忽略来自&#34; gc --auto&#34;

的失败      

在变基之后,我们致电&#34; gc --auto&#34;如果我们创造了很多松散的物体来清理。但是,我们在&& - 链内进行此操作。如果&#34; gc --auto&#34;失败(例如,因为先前的背景gc通过离开&#34; gc.log&#34;来阻止我们),然后:

     
      
  1. 我们将无法清理状态目录,让用户永远陷入rebase(即使&#34; git am --abort&#34;无法正常工作,因为它会调用&#34; gc --auto&#34;!)。
  2.   
  3. 在某些情况下,我们可能会从rebase返回一个伪造的退出代码,表示除auto-gc以外的所有内容都成功时失败。
  4.         

    我们可以通过忽略&#34; gc --auto&#34;的退出代码来解决此问题。

所以要解决此问题,只需删除gc.log

即可
rm .git/gc.log