获取任意git工作副本并使其与远程分支完全相同

时间:2012-09-25 07:22:44

标签: git version-control git-clone git-remote

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

假设本地工作目录有:

  • 其他未跟踪文件
  • 已删除的文件
  • 分阶段的变化。
  • 可能在某个任意分支上。
  • 自远程克隆以来有很多提交

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

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

有更好的方法吗?

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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