假设我有一个从某个远程克隆的任意本地git工作目录。我想让本地git存储库与远程存储库完全相同,不管自克隆以来本地目录发生了什么。我不想再做一个完整的克隆。
假设本地工作目录有:
现在我想让这个本地存储库完全反映远程。这是我当前的解决方案,但我不确定它是否涵盖所有情况以及是否有更简单的解决方案:
git stash
git clean -f -x -d
git checkout master
git fetch origin
git reset --hard origin/master
git pull origin master
有更好的方法吗?
答案 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