我只是克隆了一个git存储库,并签出了一个分支。我对它进行了修改,然后决定删除所有局部更改,因为我想要原始副本。

简而言之,我必须执行以下两个命令来删除本地更改

git checkout .

git clean -f

我的问题是,

(1)这是去除局部变化的正确方法吗,否则请告诉我正确的方法。

(2)我们什么时候使用git重置——即使没有这个命令,我也能重置

谢谢

*解决方案:重要修改:3月26日:* 用git专用术语替换了许多模糊的术语 (跟踪/无足迹的/策划/ unstaged]

当我们进行本地更改时,只能有三类文件:

1型。阶段性跟踪文件 2型。未分级跟踪文件 类型3。unstaging UnTracked files,又名UnTracked files

staging -那些被移动到staging区域/添加到索引的数据 跟踪-修改文件 UnTracked -新文件。总是unstaged。如果是阶段性的,那就意味着他们被跟踪了。

每个命令的作用:

Git结帐。-仅删除未分期的跟踪文件[类型2] git clean -f -删除unstage UnTracked文件[Type 3] git reset——hard -只删除阶段性跟踪和非阶段性跟踪文件[类型1,类型2] git stash -u删除所有更改[类型1,类型2,类型3]

结论:

很明显,我们可以用任何一个

(1) combination of `git clean -f` and `git reset --hard` 

OR

(2) `git stash -u`

达到预期的结果。

注意:Stashing,这个词的意思是“将(某物)安全秘密地存放在指定的地方”。这总是可以检索使用git stash流行。 因此,在上述两个选项中做出选择是开发者的决定。

谢谢克里斯托夫和弗雷德里克·舍宁。

编辑:03/27

我认为值得注意的是get clean -f

Git clean -f

没有回头路了。使用-n或——dry-run预览将造成的损害。

如果你也想删除目录,运行git clean -f -d

如果你只想删除被忽略的文件,运行git clean -f -X

如果你想删除被忽略的文件以及非被忽略的文件,运行git clean -f -x

参考:更多关于git清洁:如何从当前git工作树中删除本地(未跟踪)文件?

编辑:05/20/15

丢弃该分支上的所有本地提交[删除本地提交]

为了丢弃此分支上的所有本地提交,使本地分支相同 到这个分支的“上游”,只需运行git reset——hard @{u}

参考:http://sethrobertson.github.io/GitFixUm/fixup.html

或者做git重置-hard origin/master[如果本地分支是master]

注意:06/12/2015 这不是另一个被标记为重复的SO问题的重复。这个问题涉及如何删除本地GIT更改[删除添加的文件,删除添加到现有文件的更改等各种方法;在其他SO线程中,只有地址如何删除本地提交。如果您添加了一个文件,并且您想单独删除它,那么其他SO线程不会讨论它。因此这不是另一个的复制品]

编辑:06/23/15

如何恢复已推送到远程存储库的提交?

$ git revert ab12cd15

编辑:09/01/2015

从本地分支和远程分支删除之前的提交

案例:您刚刚向本地分支提交了一个更改,并立即推送到远程分支, 突然意识到,哦不!我不需要这种改变。现在做什么?

git reset——hard HEAD~1[用于删除本地分支的提交]

git push origin HEAD——force[两个命令都必须执行。用于从远程分支删除]

什么分支?它是当前签出的分支。

编辑09/08/2015 -删除本地git合并:

我在主分支和合并的主分支与一个新的工作分支阶段2

$ 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

or

$ git reset --hard HEAD~8

or

$ git reset -hard 9a88396f51e2a068bb7 [sha提交代码-这是在所有合并提交发生之前出现的代码]


当前回答

与git中的所有东西一样,有多种方法来实现它。您使用的两个命令是一种方法。你可以做的另一件事是简单地用git stash -u隐藏它们。-u确保新添加的文件(未跟踪的)也包括在内。

git stash -u的便利之处在于

这可能是实现你的目标最简单的(唯一的?)单一命令 如果你改变了你的想法之后,你得到你所有的工作与git stash pop(这就像删除电子邮件在gmail,你可以撤销,如果你改变了你的想法之后)

至于你的另一个问题,git reset -hard不会删除未跟踪的文件,所以你仍然需要git clean -f。但藏个少不更事的人可能是最方便的。

其他回答

我认为git有一件事没有被清楚地记录下来。我认为它实际上被忽视了。

转到结帐。

伙计,你救了我。我总是有我想尝试使用修改后的代码的事情。但有时会导致修改后的代码混乱,添加新的无法跟踪的文件等。所以我想做的是,摆出我想要的舞台,做那些乱七八糟的事情,然后迅速清理干净,如果我开心就承诺。

git的clean -fd对未跟踪的文件很有效。

然后git重置简单地删除分期,但git签出有点太麻烦了。逐个指定文件或使用目录并不总是理想的。有时,我想要删除的已更改的文件位于我想要保留的目录中。我希望有这样一个命令,它可以删除未分阶段的更改。谢谢。

但我认为他们应该只有git checkout,没有任何选项,删除所有非分期的更改,不要触及分期。它有点模块化和直观。更像是git重置所做的。Git clean也应该做同样的事情。

对于丢弃所有我喜欢的收藏和下降的收藏,这是最快的方法来丢弃所有,特别是如果你在多个回购之间工作。

这将隐藏{0}键的所有更改,并立即从{0}删除它

少不更事的藏货,少不更事的藏货

首先检查你的重要更改是否被保存:

哥!

比 试一试

$ git重置——很难 它会将分支重置为默认值

但如果你需要撤销:

$ edit (1) $ git添加frotz.c Filfre.c $ mailx (2) $ git重置 (3) $ git拉git://info.example.com/ nitfol


阅读更多>> https://git-scm.com/docs/git-reset

选项1:放弃跟踪和未跟踪的文件更改

放弃对阶段性和非阶段性文件所做的更改。

$ git reset --hard [HEAD]

然后完全丢弃(或删除)未跟踪的文件。

$ git clean [-f]

选择2:藏匿

您可以先隐藏您的更改

$ git stash

然后根据你想做的事情,把它放下或弹出。见https://git-scm.com/docs/git-stash # _synopsis。

选项3:手动恢复文件到原始状态

首先我们切换到目标分支

$ git checkout <branch-name>

列出所有更改过的文件

$ git status

手动将每个文件恢复到原始状态

$ git restore <file-path>

与git中的所有东西一样,有多种方法来实现它。您使用的两个命令是一种方法。你可以做的另一件事是简单地用git stash -u隐藏它们。-u确保新添加的文件(未跟踪的)也包括在内。

git stash -u的便利之处在于

这可能是实现你的目标最简单的(唯一的?)单一命令 如果你改变了你的想法之后,你得到你所有的工作与git stash pop(这就像删除电子邮件在gmail,你可以撤销,如果你改变了你的想法之后)

至于你的另一个问题,git reset -hard不会删除未跟踪的文件,所以你仍然需要git clean -f。但藏个少不更事的人可能是最方便的。