我已经阅读了所有类似的问题;似乎没有以下任何一项有效:
Delete offending files
git reset --hard HEAD
git stash
git pull
几乎所有组合,存储更改和从存储库中提取,都会导致无法合并的文件。我想丢弃所有本地更改并只使用遥控器,但我不能再次克隆(带宽和互联网使用限制与开发人员试图这样做)。我该怎么做呢?
刚试过:
git stash
git pull
也没用。
更多信息
有一个本地提交,上游也有提交。我已经尝试git pull --rebase
但它仍然无法正常工作......这给了我错误 - “由于未解决的冲突而退出”。如果我git stash, git reset --hard HEAD, git pull --rebase
,我会收到错误“拉不可能,未合并更改......”
答案 0 :(得分:173)
说遥控器为origin
且分支为master
,并且说您已经签出master
,可以尝试以下操作:
git fetch origin
git reset --hard origin/master
这基本上只需要当前分支并将其指向远程分支的HEAD
。
警告:正如评论中所述,会丢弃您的本地更改,会覆盖原点上的任何内容。
或者您可以使用管道命令执行基本相同的操作:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
编辑:我想简要解释一下为什么会有效。
.git
文件夹可以保存任意数量的存储库的提交。由于提交哈希实际上是提交内容的验证方法,而不仅仅是随机生成的值,因此它用于匹配存储库之间的提交集。
分支只是指向给定哈希的命名指针。这是一个示例集:
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
这些文件中的每一个都包含指向提交的哈希:
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
这些都是针对内部git存储机制的,并且独立于工作目录工作。通过执行以下操作:
git reset --hard origin/master
git会将当前分支指向origin / master指向的相同哈希值。然后它强制更改工作目录以匹配该哈希的文件结构/内容。
要在工作中看到这一点,请继续尝试以下内容:
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD
答案 1 :(得分:5)
我好运
git checkout -f <branch>
在类似的情况下。
http://www.kernel.org/pub//software/scm/git/docs/git-checkout.html
答案 2 :(得分:4)
解决,使用以下命令集:
git reset --hard
git pull --rebase
git rebase --skip
git pull
诀窍是重新定义更改...我们在重新设置一个简单的提交时遇到了一些麻烦,因此我们只是使用git rebase --skip(在复制文件之后)跳过它。
答案 3 :(得分:1)
假设您要丢弃任何更改,请先检查git status
的输出。对于旁边显示“未合并”的任何文件,请运行git add <unmerged file>
。然后跟进git reset --hard
。除了未跟踪的文件之外,这将消除任何本地更改。
答案 4 :(得分:1)
我用git解决了本地删除未合并文件的问题。
$ git rm <the unmerged file name>
$ git reset --hard
$ git pull --rebase
$ git rebase --skip
$ git pull
Already up-to-date.
之后我发送git commit:
$ git commit . -m "my send commit"
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
答案 5 :(得分:1)
如果您在运行git fetch
之后碰巧遇到此问题,然后git因为合并冲突而无法运行git pull
(已修改/未合并的文件,为了让你更沮丧,它不会在文件中显示任何冲突标记,因为它尚未合并)。如果您不想丢失工作,可以执行以下操作。
暂存文件。
$ git add filename
然后存储本地更改。
$ git stash
拉取并更新您的工作目录
$ git pull
恢复本地修改过的文件(git会自动合并,如果可以,否则解析它)
$ git stash pop
希望它会有所帮助。
答案 6 :(得分:1)
即使您不想删除本地更改,也有解决方案。
只需修复未合并的文件(通过git add
或git remove
)。然后执行git pull
。
答案 7 :(得分:0)
git status
。它将为您提供未合并文件的列表。git commit
Git会将仅合并提交到新提交中。 (就我而言,我在磁盘上添加了额外的文件,这些文件并没有被归入该提交。)
Git然后认为合并成功并允许您继续前进。