有没有一条git命令可以产生与全新的git clone相同的结果?
即使存在额外的分支、文件、其他文件、本地标签等,哪个命令也能完成这个任务?
想要彻底清除所有本地的残留文件,最好的选择是进行全新的克隆。
否则,您需要运行不同的命令来执行清理的各个组件。
要摆脱所有未被跟踪的文件,请使用git clean
,并打开任意数量的标志以清除所有内容:
git clean -fd
现在将您的所有分支重置为远程版本 (git reset
),或者如果它们仅存在于本地,请将其删除 (git branch
):
git checkout master
git reset --hard origin/master
git branch -d local-branch
标签也是一样的。你可以像这样删除所有本地标签:
git tag -d $(git tag -l)
如果您知道自己在做什么,可以通过操纵 .git
文件夹的内容手动执行许多这些操作。
显然,git clone
是更容易的选项。
origin
(虽然通常是正确的),而默认分支或你关心的分支是 master
(不太常见)。 - erik258origin
是 <name-of-my-upstream>
的示例,而 master
是 <name-of-my-branch>
的样本替代品。虽然我很感激你明确说明了这一点。 - Mad Physicist如果您真的想要删除所有本地工作,我认为克隆最简单。如果存储库很大和/或网络速度很慢,则可以使用以下选项:
git clone --reference existing-clone --dissociate URL new-clone
D - F [feature]
/
A - B - C [origin/master]
\
G - H [master]
git log --graph --decorate --all
命令来获取一个非常相似的视图,尽管它会是横向的。master
和一个名为feature
的新分支进行了一些更改。你已经拥有远程工作的干净版本。origin/master
跟踪远程master
分支上的远程工作。git fetch -p
来更新它,以及所有其他的远程跟踪分支(-p将修剪任何旧的远程分支)。git fetch -p
D - F [feature]
/
A - B - C - I - J - K [origin/master]
\
G - H [master]
origin/master
已经是最新的了,你可以像查看其他分支一样查看它来查看最新的工作。git rebase origin/master
命令将任何其他本地分支更新到最新更改。这将在 origin/master
之上重放任何本地更改。例如,要更新 feature
分支...git checkout feature
git rebase origin/master
D1 - F1 [feature]
/
A - B - C - I - J - K [origin/master]
\
G - H [master]
或者,如果您不再对某个分支感兴趣,您可以将其删除。
git branch -D feature
A - B - C - I - J - K [origin/master]
\
G - H [master]
最后,如果你只想放弃在master
分支上的更改,请使用git reset --hard
命令来强制将master
分支移动到origin/master
。
git checkout master
git reset --hard origin/master
D1 - F1 [feature]
/
A - B - C - I - J - K [origin/master]
[master]
现在你已经了解最新情况。
回答有关清除存储库的问题...
Git存储库通常非常小(如果它们不小,将会引起其他问题)。假设您有良好的网络连接,则确保真正的干净重置的最简单方法是再次克隆它。
如果这不可能,下一个最佳选择是按照这些说明操作。但通过克隆新存储库来摆脱困境是一种不好的习惯。练习管理您的存储库。
克隆现有克隆并清除其本地分支和标记。这将保证像.git/hooks
和.git/config
这样的东西被重置。
首先,克隆本地脏存储库。
git clone /path/to/the/dirty/repo /path/to/the/new/new_repo
cd /path/to/the/new/new_repo
然后删除所有本地分支和标签。
Git不允许您删除当前分支,因此切换到origin/master
,即master
的上游版本。
git checkout origin/master
git for-each-ref --format '%(refname:short)' refs/heads
git for-each-ref --format '%(refname:short)' refs/tags | xargs git tag -d
master
分支,从 origin/master
拉取最新代码并检出。git checkout -b master origin/master
将您的起点设置为原始存储库。您可以从脏存储库中通过git remote -v
获取它。
git remote set-url origin <original origin url>
最后执行git pull
命令来获取最新版本的上游存储库、其分支,并更新master
分支。
git pull
正如你所看到的,园艺现有的克隆更加容易。
git reset --hard
命令。git clean -dfx
-d
同时删除未跟踪的目录。-f
强制删除所有文件和目录,无需确认。-x
删除所有未跟踪的文件,包括被忽略的文件。
git pull
是主要机制。 - Schwern