是否存在与新的git克隆具有相同结果的git语句?
因此,即使有多余的分支,多余的文件,其他文件,本地标签等等……哪个命令可以完成此操作?
答案 0 :(得分:4)
删除所有本地工件的最佳选择是重新制作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
是迄今为止最简单的选项。
答案 1 :(得分:3)
如果您真的要删除所有本地工作,我也认为克隆最简单的方法。如果存储库很大和/或网络很慢,则可以使用以下选项:
git clone --reference existing-clone -dissociate URL new-clone
答案 2 :(得分:2)
有时完成一些工作,某些事情提交一些,有些则没有,等等。然后几周不执行该项目,其他人继续工作..当您返回项目时,要开始清理无需弄清楚本地代码与远程代码的比较
如果只想更新本地分支机构,则可以解决此问题而无需清除存储库。假设您的存储库看起来像这样。
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存储库通常很小(如果不是,那会导致其他问题)。假设您的网络连接良好,确保真正干净的重置最简单的方法就是再次克隆它。
如果这不可能,那么下一个最佳选择是follow these instructions。但是,通过克隆新的存储库摆脱困境是一种不好的习惯。练习对存储库进行园艺。
克隆您现有的克隆并清除其本地分支和标签。这将确保重置 .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
如您所见,将现有克隆克隆起来更容易。