Git rebase显示错误,搞砸了重新定位的日志

时间:2013-09-24 14:46:46

标签: git

运行以下命令:

git init
touch README 
git add README
git commit -m "Initial Commit"
git branch b01_02_03
git checkout b01_02_03
echo "Data 1" >> f1 && git add f1 && git commit -m "Add 01"
echo "Data 2" >> f2 && git add f2 && git commit -m "Add 02"
echo "Data 3" >> f3 && git add f3 && git commit -m "Add 03"
git checkout master
git branch b04_05 
git checkout b04_05
echo "Data 4" >> f4 && git add f4 && git commit -m "Add 04"
echo "Data 5" >> f5 && git add f5 && git commit -m "Add 05"
git checkout master
git merge --ff-only b01_02_03
git checkout b04_05

以形成以下测试树:

* 8294414 (HEAD, b04_05) add 05
* 19f920f add 04
| * 3a2ca64 (master, b01_02_03) add 03
| * 49d1aca add 02
| * c8f6d30 add 01
|/  
* 7f0ca8e initial commit

我正在运行

git rebase master

并获得以下输出。

First, rewinding head to replay your work on top of it...
Applying: add 04
/opt/swt/install/git-1.7.12.3/libexec/git-core/git-am: line 115: /home9/tclarke/git-puzzles-1/.git/rebase-apply/next: cannot overwrite existing file
/opt/swt/install/git-1.7.12.3/libexec/git-core/git-am: line 665: 1: cannot overwrite existing file
/opt/swt/install/git-1.7.12.3/libexec/git-core/git-am: line 666: 1: cannot overwrite existing file
/opt/swt/install/git-1.7.12.3/libexec/git-core/git-am: line 712: 1: cannot overwrite existing file
Applying: add 04
/opt/swt/install/git-1.7.12.3/libexec/git-core/git-am: line 115: /home9/tclarke/git-puzzles-1/.git/rebase-apply/next: cannot overwrite existing file

结果是:

* c88b1f0 (HEAD, b04_05) add 04
* 761c779 add 04
* 3a2ca64 (master, b01_02_03) add 03
* 49d1aca add 02
* c8f6d30 add 01
* 7f0ca8e initial commit

成功的rebase,但是日志被搞砸了,日志“add 05”变得与它的前任相同。这可以在我创建的新git存储库中的不同文件空间中的不同机器上重复。我的邻居对同一棵树没有同样的问题。

有关如何解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:0)

由于某种原因,某些repo元文件的权限可能是错误的。

首先,尝试在本地repo的主路径(chmod -R u+rw .git)中运行/home9/tclarke/git-puzzles-1,然后查看rebase是否有效。 (即使它确实如此,也要做下一步。)

接下来,确保将远程仓库初始化为共享。在repo的远程位置(您需要shell访问),请查看config文件以及[core]部分下是否有此行:

sharedrepository = 1

如果缺少,请添加,然后运行chmod -R g+w /path/to/repo(并在denyNonFastforwards = true下添加[receive])。

最后,确保没有其他进程锁定了您的本地repo的元文件(无法想到会发生这种情况的原因,但仍然如此)。运行lsof | grep -F /home9/tclarke/git-puzzles-1/.git,看看你是否想出任何东西。