我有两个分支:
当地分公司(和我一起工作的那家) 远程分支(公共的,只有经过良好测试的提交才会去那里)
最近我把我当地的分公司搞得一团糟。
如何将本地分支完全替换为远程分支,以便从远程分支现在所在的位置继续工作?
我已经搜索了SO,在本地签出到远程分支没有任何影响。
我有两个分支:
当地分公司(和我一起工作的那家) 远程分支(公共的,只有经过良好测试的提交才会去那里)
最近我把我当地的分公司搞得一团糟。
如何将本地分支完全替换为远程分支,以便从远程分支现在所在的位置继续工作?
我已经搜索了SO,在本地签出到远程分支没有任何影响。
当前回答
git reset --hard
git clean -fd
这为我工作-清洁显示它删除的所有文件。如果它告诉你你会失去零钱,你需要藏起来。
其他回答
如所选解释所述,git重置是好的。 但是现在我们经常使用子模块:存储库中的存储库。例如,如果您在项目中使用ZF3和jQuery,您很可能希望从它们的原始存储库克隆它们。 在这种情况下,git重置是不够的。 我们需要将子模块更新到存储库中定义的确切版本:
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule foreach git submodule update
git status
这和你递归地进入(cd)每个子模块的工作目录并运行是一样的:
git submodule update
这和
git checkout master
git pull
因为子模块不是指向分支,而是指向提交。
在这种情况下,当您手动签出1个或多个子模块的某个分支时 你可以跑
git submodule foreach git pull
丑陋但更简单的方法:删除本地文件夹,并再次克隆远程存储库。
git reset --hard
git clean -fd
这为我工作-清洁显示它删除的所有文件。如果它告诉你你会失去零钱,你需要藏起来。
用远程分支替换所有内容;但是,只能从本地分支打开的同一个提交:
git reset --hard origin/some-branch
或者,从远程分支获取最新的并替换所有内容:
git fetch origin some-branch
git reset --hard FETCH_HEAD
顺便说一句,如果需要,你可以清除你还没有提交的未跟踪文件和目录:
git clean -fd
git branch -D <branch-name>
git fetch <remote> <branch-name>
git checkout -b <branch-name> --track <remote>/<branch-name>