无法进行Git拉取,未合并的文件

无法进行Git拉取,未合并的文件,git,Git,我已经阅读了所有关于这方面的类似问题;以下各项似乎都不起作用: Delete offending files git reset --hard HEAD git stash git pull 几乎每一种组合,隐藏更改和从存储库中提取,都会导致无法组织的文件。我想放弃所有本地更改,只使用远程,但我无法再次克隆(由于开发人员试图这样做,带宽和互联网使用受到限制)。我该怎么做 刚刚试过: git stash git pull 也不管用 更多信息 有一个本地提交,上游也有一个提交。因此,我尝试了gi

我已经阅读了所有关于这方面的类似问题;以下各项似乎都不起作用:

Delete offending files
git reset --hard HEAD
git stash
git pull
几乎每一种组合,隐藏更改和从存储库中提取,都会导致无法组织的文件。我想放弃所有本地更改,只使用远程,但我无法再次克隆(由于开发人员试图这样做,带宽和互联网使用受到限制)。我该怎么做

刚刚试过:

git stash
git pull
也不管用

更多信息

有一个本地提交,上游也有一个提交。因此,我尝试了git pull--rebase,但它仍然不能正常工作。。。这给了我错误——“由于未解决的冲突而退出”。如果我做了git stash,git reset--硬头,git pull--rebase,我会得到一个错误“pull是不可能的,未合并的更改…”

我很幸运

git checkout -f <branch>
git签出-f
在类似的情况下


假设您想放弃您所做的任何更改,请首先检查
git status
的输出。对于旁边显示“未合并”的任何文件,请运行
git add
。然后继续执行
git reset--hard
。这将消除除未跟踪文件之外的任何本地更改。

使用以下命令集解决:

git reset --hard
git pull --rebase
git rebase --skip
git pull

诀窍是重新调整更改的基础。。。我们在重定一个琐碎的提交时遇到了一些问题,因此我们只是使用git-rebase跳过了它--skip(在复制了文件之后)。

假设远程主机是
源主机,分支是
主主机
,假设您已经签出
主主机
,可以尝试以下操作:

git fetch origin
git reset --hard origin/master
git reset --hard 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
这基本上只是获取当前分支并将其指向远程分支的
头部

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

也可以使用卫浴命令执行基本相同的操作:

git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
每个文件都包含一个指向提交的哈希:

$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
这些都是用于内部git存储机制的,并且独立于工作目录工作。通过执行以下操作:

git fetch origin
git reset --hard origin/master
git reset --hard 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
git将当前分支指向origin/master指向的同一散列值。然后,它强制更改工作目录以匹配该散列中的文件结构/内容

要在工作中看到这一点,请继续并尝试以下方法:

git fetch origin
git reset --hard origin/master
git reset --hard 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
git签出-b测试分支
#通过以下内容查看当前提交和差异
吉特秀头
#现在指向另一个位置
git重置——硬/
#再次查看更改
吉特秀头

我用git解决了问题,在本地删除未合并的文件

$ git rm <the unmerged file name>
$ git reset --hard
$ git pull --rebase
$ git rebase --skip
$ git pull
Already up-to-date.

瑞安·斯图尔特的回答几乎就在那里。如果您确实不想删除本地更改,则可以使用工作流合并:

  • 运行
    git status
    。它将为您提供未合并文件的列表
  • 合并它们(手工等)
  • 运行git提交
Git将只提交合并到新提交中的内容。(在我的例子中,我在磁盘上添加了额外的文件,这些文件并没有集中到提交中。)


Git然后认为合并成功并允许您继续。

如果您在运行
Git fetch
后碰巧遇到此问题,并且由于合并冲突,Git不允许您运行
Git pull
(修改/未合并的文件,并且为了使您更加沮丧,它不会在文件中显示任何冲突标记,因为它尚未合并)。如果您不希望丢失您的工作,可以执行以下操作

暂存文件

$ git add filename
然后隐藏本地更改

$ git stash
拉取并更新您的工作目录

$ git pull
还原本地修改的文件(git将自动合并,如果可以的话,否则将解析它)


希望能有所帮助。

即使您不想删除本地更改,也有一个解决方案。
只需修复未合并的文件(通过
git add
git remove
)。然后执行
git pull

哦,对了。它可能不会说“未合并”。它也可以说“都已修改”或者一两件其他事情。
git status
的输出是什么?发布此消息后,我告诉团队成员尝试
git-rebase--abort
git-pull--rebase
,根据git最近批准的编辑的建议,在开始添加大量警告,就像指出它已经过时一样Oned:“然后[git]强制更改工作目录以匹配该散列的文件结构/内容。”但我猜这还不够明确。