4

假设我有一个从某个远程克隆的任意本地 git 工作目录。我想让本地 git 存储库与远程存储库完全相同,而不管本地目录自克隆以来发生了什么。我不想再做一个完整的克隆。

假设本地工作目录有:

  • 其他未跟踪的文件
  • 删除的文件
  • 阶段性变化。
  • 可能在某个任意分支上。
  • 从远程克隆后有一堆提交

现在我想让这个本地存储库准确地反映远程。这是我当前的解决方案,但我不确定它是否涵盖所有情况以及是否有更简单的解决方案:

git stash
git clean -f -x -d
git checkout master
git fetch origin
git reset --hard origin/master
git pull origin master

有一个更好的方法吗?

4

2 回答 2

3

以下命令集应使您进入与远程分支相同的状态:

git checkout -f master                # Check out the local 'master' branch
git fetch origin                      # Fetch the 'origin' remote
git reset --hard origin/master        # Reset all tracked files to remote state
git clean -dxff                       # Remove all non-tracked files

请注意(出于显而易见的原因),这些命令具有潜在的破坏性 - 也就是说,任何被此覆盖且未保存在可通过其他方式访问的提交中的任何本地更改都将丢失。

于 2012-09-25T07:28:58.713 回答
3
git reset --hard

将转储您所做的任何更改,包括您已暂存的任何更改。

git clean -xdf

将删除工作目录中由于忽略或排除而导致 git 未跟踪的任何内容。

git checkout HEAD

不会把你放在任何分支上,这样你就可以清理所有东西了。

git branch | xargs git branch -D

将删除您所有的本地分支机构

git tag -l | xargs git tag -d

将删除您的所有标签

git prune origin

将摆脱不再在远程上的任何跟踪分支

git fetch

将从您没有的遥控器获取任何分支和标签。您可以在此处停下来检查您想要使用的任何远程分支,同时使用以下命令创建本地分支

git checkout origin/master

或者您可以创建本地分支,指向所有现有远程分支在您获取时指向的位置

git branch -r | xargs -n 1 git checkout
于 2012-09-25T08:13:20.113 回答