2016-10-20 75 views
2

我在git中的目录中有一堆文件没有被跟踪。我犯了做错git add .然后承诺并推的变化。我该如何回到未提交的文件之前未跟踪的文件,但仍然在目录中(git reset --hard删除了所有文件,对我来说不好,而不是再次解除它们)。我有许多文件位于不同的位置,因此git reset <FILE>不适用于我。撤消在Git中添加文件

+0

可能重复[如何在提交之前撤销'git add'](http://stackoverflow.com/questions/348170/how-to-undo-git-add-before-commit) – jjst

+1

@jjst请参阅编辑为什么我的不同。另外,我是在提交后,而不是之前 – theEpsilon

+0

@theEpsilon你是唯一的回购用户吗?你基本上需要[撤销'git push'](http://stackoverflow.com/questions/1270514/undoing-a-git-push)。 – legends2k

回答

1
$ git commit -m "Something terribly misguided"    (1) 
$ git reset HEAD~           (2) 
<< edit files as necessary >>        (3) 
$ git add ...            (4) 
$ git commit -c ORIG_HEAD 
  1. 这是要撤消
  2. 这会使你的工作树(您的文件在磁盘上的状态)改变什么,但撤销的承诺,并让你犯不分阶段的变化(这样就在git状态下显示为“未进行提交的更改”,并且在提交之前需要再次添加它们)。如果你只想添加更多的更改到上一次提交,或者更改提交message1,那么可以使用git reset --soft HEAD〜来代替,就像git reset HEAD〜,但是会保留现有的更改。
  3. 对工作树文件进行更正。
  4. git添加任何你想包括在你的新提交中。
  5. 提交更改,重新使用旧的提交消息。重置将旧头复制到.git/ORIG_HEAD;使用-c ORIG_HEAD提交将打开一个编辑器,该编辑器最初包含来自旧提交的日志消息并允许您对其进行编辑。如果您不需要编辑消息,则可以使用-C选项。

来源: How to undo last commit(s) in Git?

1

首先,你要恢复的最后一次提交,并通过回返回的所有文件到临时区域:

git reset --soft HEAD~1 

这不会删除任何文件,它是安全的。

然后,您可以删除所有被添加到临时区域中的文件:如果您运行git status

git reset 

现在,你可以看到,所有的文件都是不分级。

然后你可以只有git add你想要的文件。

+0

感谢您的回答!如果您提前30分钟回答,我会将其标记为已接受 – theEpsilon

+0

很高兴能提供帮助。别介意:) @ TheEpsilon –