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
提交任何内容,总是通过合并。
到目前为止我尝试过的:
- 使用
--force
参数,同样的问题
git reset origin/master --hard
和 运行 又是 pull
,同样的问题
如何在不关心此类问题的情况下用另一个更新的分支更新 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
我正在将一个分支拉入 master
以合并它。
我 运行 的命令是(同时检出 master
):git pull origin feature/some_branch
不幸的是,我的同事似乎在那里执行了一些(我认为是良性的)文件删除,现在 git 喷出了一个 error: unable to unlink old 'somefile': No such file or directory
。
我尝试在网上查看,但大多数关于此错误的参考资料都与权限有关,但此处并非如此。
有问题的文件在合并前不存在于master上,而它在新分支中。
问题是 master
很长时间没有更新,所以有太多的更改和受影响的文件让我无法开始计算代码。
我只需要 master
来包含来自新分支的所有更改。我们从不直接向 master
提交任何内容,总是通过合并。
到目前为止我尝试过的:
- 使用
--force
参数,同样的问题 git reset origin/master --hard
和 运行 又是pull
,同样的问题
如何在不关心此类问题的情况下用另一个更新的分支更新 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