Git Merge: error: unable to unlink old <file>: No such file or directory

Git Merge: error: unable to unlink old <file>: No such file or directory

我正在将一个分支拉入 master 以合并它。

我 运行 的命令是(同时检出 master):git pull origin feature/some_branch

不幸的是,我的同事似乎在那里执行了一些(我认为是良性的)文件删除,现在 git 喷出了一个 error: unable to unlink old 'somefile': No such file or directory

我尝试在网上查看,但大多数关于此错误的参考资料都与权限有关,但此处并非如此。

有问题的文件在合并前存在于master上,而它在新分支中。

问题是 master 很长时间没有更新,所以有太多的更改和受影响的文件让我无法开始计算代码。

我只需要 master 来包含来自新分支的所有更改。我们从不直接向 master 提交任何内容,总是通过合并。

到目前为止我尝试过的:

如何在不关心此类问题的情况下用另一个更新的分支更新 master,同时保留其历史记录?

I just need master to contain all the changes that came from the new branch.

然后你可以强制合并,以反映那个分支的内容feature/some_branch

但是您可以使用 similar idea 而不是使用 merge --ours master,它保留了第一个父历史记录:

git checkout master

# make merge commit but without conflicts!!
# the contents of 'ours' will be discarded later
git merge -s ours feature/some_branch    

# make temporary branch to merged commit
git branch tmp         

# get contents of working tree and index to the one of feature/some_branch
git reset --hard feature/some_branch

# reset to our merged commit but 
# keep contents of working tree and index
git reset --soft tmp

# change the contents of the merged commit
# with the contents of feature/some_branch
git commit --amend

# get rid off our temporary branch
git branch -D tmp

# verify that the merge commit contains only contents of feature/some_branch
git diff HEAD feature/some_branch

要用 origin/master 上的版本替换您的 master 分支,您可以尝试删除并重新创建它。 master 执行此操作时不需要签出,因此您可以避免与更改工作目录相关的错误。

首先检查您可以检查的不同分支:

git checkout feature/some-branch

然后删除您本地的 master 分支并重新创建它,包括它的跟踪信息:

git branch --delete master
git branch master origin/master
git branch --set-upstream-to=origin/master master

最后,尝试切换到新的 master:

git branch checkout master