Git重新基址显示错误,把重新基址的日志搞砸了

Git重新基址显示错误,把重新基址的日志搞砸了,git,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 f

已运行以下命令:

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存储库中重复。我的邻居对同一棵树没有同样的问题


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

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

首先,尝试在本地回购协议的主路径/home9/tclarke/git-puzzles-1中运行chmod-ru+rw.git,然后查看重新基础是否有效。即使是这样,也要做下一步

接下来,确保远程repo已初始化为共享。在回购协议的远程位置,您需要shell访问,查看配置文件,以及[core]部分下是否有以下行:

sharedrepository = 1
如果缺少,添加它,然后运行chmod-rg+w/path/to/repo并在[receive]下添加denynonfastforts=true


最后,确保没有其他进程锁定了您的本地回购的元文件。我想不出发生这种情况的原因,但仍然。运行lsof | grep-F/home9/tclarke/git-puzzles-1/.git,看看你有没有什么发现。

你有没有检查过这是否仅仅是一个简单的文件权限问题?我很确定就是这个问题。奇怪的是有问题的文件:/home9/tclarke/git-puzzles-1/.git/rebase apply/next似乎是由rebase本身创建和销毁的,所以在我尝试检查其权限时它根本不存在。您的umask设置为什么?您是否有可能取消自己对文件的写入权限,例如0222的umask?umask 0002,所以不是这样。啊,我应该提到的是,这完全在我的本地回购范围内,我正在尝试重新定基操作。@deworde您提到在另一台机器上进行新的签出,并且它适用于您的邻居。那么你真的有一个远程回购协议你是从那里克隆的?我明白你的意思。它是一个纯克隆,然后我们重新初始化并去掉远程设备,所以它基本上让我们达到了这样的程度:它只是一个处于已知状态的repo,但与原始源没有连接。我应该和同一州的一位真正的白手起家的当地人一起尝试一下,看看我是否也能得到同样的效果。@deworde你是直接在光秃秃的回购协议上尝试这个吗?直接在裸repo中运行git命令并不总是一个好主意-如果命令需要一个工作树,而rebase需要,那么它将不会像预期的那样工作。为了确保不是这样,我确实在一个新文件夹上启动了git,并从头构建了上面的树。同样的问题。