我只是克隆了一个git存储库并签出了一个分支。我进行了处理,然后决定删除所有本地更改,因为我想要原始副本。
简而言之,我必须执行以下两个命令来删除本地更改
git checkout .
git clean -f
我的问题是
(1)这是摆脱局部变化的正确方法,还是请让我知道正确的方法。
(2)什么时候git reset --hard
即使没有此命令我也可以重置
谢谢
*解决方案:主要修改:03/26:* 用git专有术语替换了许多模糊的术语[已跟踪/未跟踪/已分阶段/未分阶段]
当我们进行本地更改时,文件可能只有三类:
类型1.暂存的跟踪文件
类型2。未暂存的跟踪文件
类型3。未暂存的未跟踪文件又称为未跟踪的文件
- 暂存-已移至暂存区/已添加至索引的暂存区
- 跟踪-修改后的文件
- 未跟踪-新文件。始终未登台。如果上演,则意味着它们已被跟踪。
每个命令的作用:
git checkout .
-仅删除未暂存的跟踪文件[类型2]git clean -f
-仅删除未暂存的未跟踪文件[类型3]git reset --hard
-仅删除暂存的已跟踪和未暂存的跟踪文件[类型1,类型2]git stash -u
-删除所有更改[类型1,类型2,类型3]
结论:
很明显,我们可以使用
(1) combination of `git clean -f` and `git reset --hard`
要么
(2) `git stash -u`
以达到预期的结果。
注意:藏匿,这个词的意思是“安全(秘密)在指定位置存储(某物)”。始终可以使用进行检索git stash pop
。因此,在上述两个选项之间进行选择是开发人员的选择。
谢谢Christoph和FrederikSchøning。
编辑:03/27
我认为值得把“ 当心 ”笔记git clean -f
git clean -f
没有回头路了。使用-n
或--dry-run
预览将要造成的损害。
如果还要删除目录,请运行 git clean -f -d
如果只想删除忽略的文件,请运行 git clean -f -X
如果要删除忽略的文件和非忽略的文件,请运行 git clean -f -x
参考:更多信息git clean
:如何从当前Git工作树中删除本地(未跟踪)文件?
编辑:15/20/15
丢弃此分支上的所有本地提交 [删除本地提交]
为了丢弃该分支上的所有本地提交,使该本地分支与该分支的“上游”相同,只需运行 git reset --hard @{u}
参考:http : //sethrobertson.github.io/GitFixUm/fixup.html
或git reset --hard origin/master
[如果当地分支机构是master
]
注意:2015年6月12日 这不是另一个标记为重复的SO问题的重复。这个问题解决了如何删除本地GIT更改[删除添加的文件,删除添加到现有文件的更改等,以及各种方法;在另一个SO线程中,仅解决如何删除本地提交的位置。如果添加了文件,并且想单独删除该文件,则另一个SO线程不会对此进行讨论。因此,这不是另一个的副本]
编辑:06/23/15
如何还原已经推送到远程存储库的提交?
$ git revert ab12cd15
编辑:2015年9月1日
从本地分支和远程分支删除先前的提交
案例:您刚刚对本地分支进行了更改,并立即将其推送到远程分支,突然意识到,哦,不!我不需要这个改变。现在做什么?
git reset --hard HEAD~1
[用于从本地分支删除该提交]
git push origin HEAD --force
[这两个命令都必须执行。用于从远程分支删除]
什么是分公司?它是当前签出的分支。
编辑09/08/2015-删除本地git merge:
我在master
分支机构中,并且合并master
了一个新工作的分支机构phase2
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
问:如何摆脱这种合并?试过了git reset --hard
,git clean -d -f
两者都没有用。
唯一有效的是以下任何一项:
$ git reset --hard origin/master
要么
$ git reset --hard HEAD~8
要么
$ git reset --hard 9a88396f51e2a068bb7
[sha提交代码-这是所有合并提交发生之前的代码]
git stash -a
[或--all]也将存储被忽略和未跟踪的文件。git clean -x
也会清除忽略的文件。git clean -X
将仅清除被忽略的文件。