忽略本地变化时Git拉?

mar*_*son 433 git git-pull

有没有办法做一个git pull忽略任何本地文件更改而不吹掉目录而不得不执行git clone

Cas*_*bel 740

如果你的意思是你想让pull覆盖本地更改,那么就像工作树是干净的那样进行合并,那么,清理工作树:

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

如果有未跟踪的本地文件,您可以使用git clean它们删除它们.使用git clean -f删除未跟踪文件,-df删除未跟踪的文件和目录,并-xdf删除未跟踪或忽略的文件或目录.

另一方面,如果你想以某种方式保留局部修改,你可以使用藏匿在拉动之前隐藏它们,然后再重新应用它们:

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

我认为忽略这些变化是没有任何意义的- 虽然拉动的一半是合并,它需要将提交的内容版本与它所获取的版本合并.

  • @shailenTJ"本地更改"在这里表示未提交的更改,而不是本地提交.`git reset --hard`影响前者,而不影响后者.如果你想完全重置到遥控器的状态,`git reset --hard origin/<branch>` - 但是在这种情况下,那两个你提前做过的提交是你做的工作,而不是你想要的东西扔掉. (18认同)
  • 如果在`git reset`之后你的文件仍然与遥控器不同,请阅读http://stackoverflow.com/questions/1257592/removing-files-saying-old-mode-100755-new-mode-100644-from-unstaged-changes -在 (3认同)
  • Git是有史以来最奇怪的东西。Git reset --hard done。然后 git status: 您的分支领先 2 次提交。 (3认同)
  • 所以这与破坏本地存储库和重新下载是一回事,对吧?我只是希望能够强制拉动和覆盖更改以方便使用.99%的时间我收到此错误消息时,我不小心搞砸了本地的东西,只是想从回购开始. (2认同)
  • @adelriosantiago Artur 的答案也有一个重置 --hard。它丢弃的内容与这个答案的部分完全相同。是的,扔掉东西有潜在的危险,但这是 OP 要求做的。他们的替代方案是删除目录并重新克隆。他们“想”扔掉东西。例如,如果您想提交到本地分支并单独获取原始分支,那么很好,这是更常见的事情 - 这不是这个问题的目的。 (2认同)

Art*_*yan 260

对我来说,以下工作:

(1)首先获取所有更改:

$ git fetch --all
Run Code Online (Sandbox Code Playgroud)

(2)然后重置主人:

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

(3)拉/更新:

$ git pull
Run Code Online (Sandbox Code Playgroud)

  • 当最佳答案遇到很多麻烦时,对我来说很有用.谢谢! (18认同)
  • 这应该是最好的答案:) (11认同)
  • 这甚至可以在您提交本地更改时起作用,但您仍然希望还原 (6认同)
  • @Marco Servetto:您首先获取所有git更改,但尚未应用它们.然后将主服务器重置为最后一个状态(已更新).如果跳过第一步,则会将更改还原为旧主(本地).根据我的经验,我描述它的方式,永远不会导致问题.所有其他尝试都在最后. (3认同)
  • 我只做了步骤 1 和 2,看起来就足够了。步骤3的目的是什么? (2认同)

Dr *_*eco 23

下面的命令总是不起作用.如果您这样做:

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla

$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)

等等...

真正重新开始,下载分支并覆盖所有本地更改,只需执行以下操作:


$ git checkout thebranch
$ git reset --hard origin/thebranch
Run Code Online (Sandbox Code Playgroud)

这将工作得很好.

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...

$ git status
# On branch thebranch
nothing to commit (working directory clean)

$ git checkout thebranch
Already on 'thebranch'
Run Code Online (Sandbox Code Playgroud)

  • 是.这就是我所需要的最终"不要给出一个关于什么是本地的"方法.谢谢.:) (4认同)

Vic*_*tor 22

你只需要一个能给出完全相同结果的命令rm -rf local_repo && git clone remote_url,对吧?我也想要这个功能.我想知道为什么git不提供这样的命令(例如git reclonegit sync),svn也没有提供这样的命令(例如svn recheckoutsvn sync).

请尝试以下命令:

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

  • 伙计们!git clean -fxd也从.gitignore删除文件。 (3认同)

gil*_*gil 15

最短的方法是:

git pull --rebase --autostash
Run Code Online (Sandbox Code Playgroud)


Pab*_*zos 10

这对我有用

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

使用接受的答案,我收到冲突错误


Luc*_* C. 9

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


l00*_*01d 9

如果您位于分支上,并且想要放弃分支上的任何本地更改并拉取远程分支,但遇到 Your branch and 'origin/<branch_name>' have diverged,则可以通过以下方式在停留在分支上时解决:

git fetch --all
git reset --hard origin/<branch_name>
Run Code Online (Sandbox Code Playgroud)


Set*_*son 8

查看git stash将所有本地更改放入"存储文件"并恢复到上次提交.此时,您可以应用隐藏的更改,或将其丢弃.


Str*_*dic 8

如果你在Linux上:

git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
Run Code Online (Sandbox Code Playgroud)

for循环将删除在本地仓库中更改的所有跟踪文件,因此git pull可以正常工作.
最好的事情是,只有被跟踪的文件将被repo中的文件覆盖,所有其他文件将保持不变.


Cas*_*nco 7

我通常这样做:

git checkout .
git pull
Run Code Online (Sandbox Code Playgroud)

在项目的根文件夹中。

  • @UjjwalRoy 从对该问题的评论来看,我相信这就是意图。但是当我想保存本地更改时,我使用 `git add -A` `git stash` (2认同)