我只是克隆了一个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提交代码-这是在所有合并提交发生之前出现的代码]


当前回答

最好的方法是检查变化。

在一个名为project-name的项目中修改pom.xml文件,你可以这样做:

git status

# modified:   project-name/pom.xml

git checkout project-name/pom.xml
git checkout master

# Checking out files: 100% (491/491), done.
# Branch master set up to track remote branch master from origin.
# Switched to a new branch 'master'

其他回答

与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也应该做同样的事情。

此时添加答案的原因:

到目前为止,我在我最初的问题中添加了结论和“答案”,使问题非常冗长,因此转向单独的答案。

我还添加了更多常用的git命令,可以帮助我使用git,也可以帮助其他人。

基本上就是清理所有本地提交 $ git重置-困难和 $ git clean -d -f


在进行任何提交之前的第一步是配置您的用户名和提交时出现的电子邮件。

#设置要附加到提交事务的名称

$ git config --global user.name "[name]"

#设置要附加到提交事务的电子邮件

$ git config --global user.email "[email address]"

列出全局配置

$ git config --list

列出远程URL

$ git remote show origin

#检查状态

git status

列出所有本地和远程分支

git branch -a

#创建一个新的本地分支并开始在这个分支上工作

git checkout -b "branchname" 

或者,它可以分为两步

创建分支:git分支branchname 操作这个分支:git checkout branchname

#提交本地更改[两步过程:-将文件添加到索引,这意味着添加到暂存区域。然后提交这个暂存区域中的文件]

git add <path to file>

git commit -m "commit message"

#结帐其他本地分支

git checkout "local branch name"

#移除本地分支中的所有更改[假设你在本地分支中做了一些更改,如添加新文件或修改现有文件,或进行本地提交,但不再需要这些] Git clean -d -f和Git reset——hard[清除所有对本地分支的本地更改,除非本地提交]

Git stash -u也会删除所有更改

注意: 很明显,我们可以用任何一个 (1)结合git clean -d -f和git reset——硬 或 (2) git stash -u 达到预期的结果。

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

注2:git重置——hard将删除工作目录更改。在运行此命令之前,请务必保存要保留的任何本地更改。

#切换到主分支,并确保您是最新的。

git checkout master

Git获取[这可能是必要的(取决于你的Git配置)来接收源/主的更新]

git pull

#将特性分支合并到主分支中。

git merge feature_branch

#重置主分支到原点的状态

git reset origin/master

#不小心从本地删除了一个文件,如何找回它回来? 做一个git状态来获得被删除资源的完整文件路径

git checkout branchname <file path name>

就是这样!

#合并主分支和其他分支

git checkout master
git merge someotherbranchname

#重命名本地分支

git branch -m old-branch-name new-branch-name

#删除本地分支

git branch -D branch-name

#删除远程分支

git push origin --delete branchname

or

git push origin :branch-name

#恢复已推送到远程存储库的提交

git revert hgytyz4567

#分支从以前使用GIT提交

git branch branchname <sha1-of-commit>

#更改已推送到远程的最近提交的提交消息

git commit --amend -m "new commit message"
git push --force origin <branch-name>

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

为了放弃这个分支上的所有本地提交,让本地分支与这个分支的“上游”相同,只需运行即可

git reset --hard @{u}

参考:http://sethrobertson.github.io/GitFixUm/fixup.html 或者做git重置-hard origin/master[如果本地分支是master]

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

$ git revert ab12cd15

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

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

git reset——hard HEAD~1[用于删除本地分支的提交。1表示你所做的一次提交

git push origin HEAD——force[两个命令都必须执行。用于从远程分支删除]。当前签出的分支将被引用为您执行此操作的分支。

#从本地和远程repo删除一些最近的提交,并保留到您想要的提交。(一种本地和远程的还原提交)

让我们假设你有3个提交,你已经推送到名为“develop”的远程分支

commitid-1 done at 9am
commitid-2 done at 10am
commitid-3 done at 11am. // latest commit. HEAD is current here.

恢复到旧提交(更改分支的状态)

Git log——oneline——decoration——graph //查看你所有的commit

Git clean -d -f //清除任何本地更改

Git reset——hard commit -1 //本地恢复到此提交

Git push -u origin +develop //将此状态推送到远程。+做力推

#删除本地git合并: 案例: 我在主分支和合并的主分支与一个新的工作分支阶段2

$ git status

在分支主机上

我们要相交 哥!

在分支主机上

你的分支比'origin/master'提前8次提交。

问:如何摆脱这个本地git合并?尝试git reset -hard和git clean -d -f都没有工作。 唯一有效的方法是以下任何一种:

$ git重置-硬源/主

or

$ git重置-硬头~8

or

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

#创建gitignore文件

点击.gitignore //在MAC或Unix用户中创建文件

样本。gitignore内容:

.project
*.py
.settings

GIT备忘单参考链接:https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf

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

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

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

选项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>