1

运行以下命令后:

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

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

关于如何解决这个问题的任何建议?

4

1 回答 1

0

The permissions for some of the repo meta-files could be wrong, for some reason.

First, try running chmod -R u+rw .git in the local repo's main path (/home9/tclarke/git-puzzles-1), then see if the rebase works. (Even if it does, do the next step as well).

Next, make sure the remote repo was initialized as shared. On the remote location of the repo (you need shell access for this), look at the config file and whether, under the [core] section, you have this line:

sharedrepository = 1

If it's missing, add it, then run chmod -R g+w /path/to/repo (and add denyNonFastforwards = true under [receive] as well).

Last, make sure no other processes have locked your local repo's meta-files (can't think of a reason this would happen, but still). Run lsof | grep -F /home9/tclarke/git-puzzles-1/.git and see if you come up with anything.

于 2013-09-24T15:07:23.910 回答