Git Pull是不可能的,未合并的文件

Chr*_*art 83 git

我已经阅读了所有类似的问题; 似乎没有以下任何一个有效:

Delete offending files
git reset --hard HEAD
git stash
git pull
Run Code Online (Sandbox Code Playgroud)

几乎所有组合,存储更改和从存储库中提取,都会导致无法合并的文件.我想丢弃所有本地更改并只使用遥控器,但我不能再次克隆(带宽和互联网使用限制与开发人员试图这样做).我该怎么做呢?

刚试过:

git stash
git pull
Run Code Online (Sandbox Code Playgroud)

也没工作.

更多信息

有一个本地提交,上游也有提交.我已经尝试了,git pull --rebase但它仍然无法正常工作......这给了我错误 - "由于未解决的冲突而退出".如果我这样做git stash, git reset --hard HEAD, git pull --rebase,我会收到错误"拉不可能,未合并更改......"

Tre*_*ris 183

假设遥控器是origin,并且分支是master,并且说您已经master签出,可能会尝试以下操作:

git fetch origin
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

这基本上只需要当前分支并将其指向HEAD远程分支.

警告:如评论中所述,这将丢弃您的本地更改覆盖原点上的任何内容.

或者您可以使用管道命令执行基本相同的操作:

git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
Run Code Online (Sandbox Code Playgroud)

编辑:我想简要解释为什么这样做.

.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
Run Code Online (Sandbox Code Playgroud)

每个文件都包含一个指向提交的哈希:

$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
Run Code Online (Sandbox Code Playgroud)

这些都是内部git存储机制,独立于工作目录.通过执行以下操作:

git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 从最近批准的编辑开始添加大量警告,就像指出它已经提到的那样:“然后 [git] 强行更改工作目录以匹配该哈希的文件结构/内容。” 但猜测这还不够明确。 (2认同)

Chr*_*art 5

使用以下命令集解决:

git reset --hard
git pull --rebase
git rebase --skip
git pull
Run Code Online (Sandbox Code Playgroud)

诀窍是重新设置更改的基础...重新设置一个琐碎的提交时遇到了一些麻烦,因此我们仅使用git rebase --skip(复制了文件之后)就跳过了它。


Nim*_*mal 5

如果您在运行 a 后碰巧遇到此问题git fetch,然后 gitgit pull由于合并冲突而不允许您运行(修改/未合并的文件,并且让您更加沮丧,它不会在文件,因为它尚未合并)。如果您不想丢失您的工作,您可以执行以下操作。

暂存文件。

$ git add filename
Run Code Online (Sandbox Code Playgroud)

然后隐藏本地更改。

$ git stash
Run Code Online (Sandbox Code Playgroud)

拉取并更新您的工作目录

$ git pull
Run Code Online (Sandbox Code Playgroud)

恢复你本地修改过的文件(如果可以,git会自动合并,否则解决它)

$ git stash pop
Run Code Online (Sandbox Code Playgroud)

希望它会有所帮助。