撤消最近的“git add”。命令在git bash上触发

问题描述:

我错误地做了git add .现在我在临时区域有多个文件。我知道我可以使用git reset来暂停文件,但这将占用我大部分时间。撤消最近的“git add”。命令在git bash上触发

我正在寻找可以节省我的时间的解决方案。现在我想知道,

  • 有没有撤消最后git add .命令混帐上发射一个可行的办法。这样我就不必多次做git reset file

  • 如果上述方式是不可能的,那么是否有一种方法可以使用单个命令重置多个文件。

+0

只是做一个'git reset' – galath

+1

没办法解决这个问题。未来最好的方法是小提交。 https://sethrobertson.github.io/GitBestPractices/ –

你有上演你要的文件保持上演,或者你愿意拥有的所有文件回去完全不分级的?

后者很容易:使用git reset没有附加参数,如galath commented。这确实一个--mixed复位:

  • 移动当前分支到指定的提交,但没有命名的承诺,这意味着当前分支移到HEAD,并HEAD是当前提交,所以我们把当前的承诺本身,它什么都不做;然后
  • 用指定提交中的版本替换索引中的文件(同样,我们没有命名,所以这就是HEAD提交)。

(这两个步骤是--soft--mixed部分;没有--hardgit reset跳过消灭工作树改变的第三步显然,你不想让那些灰飞烟灭,所以你不应该使用--hard。)

前者更难。为了得到一个列表的所有筹备的文件,使用:

git diff --cached --name-only 

如果你希望有选择地重新设置最,但不是全部,这些文件的,你可以写这些文件的名称到一个文件中(最好是你的工作之外-tree),例如/tmp/list,然后编辑该文件以删除要保留的名称。然后:

git reset -- $(cat /tmp/list) 

或:

xargs git reset -- < /tmp/list 

上运行的每个路径名git reset --。这假定文件名中没有空格;如果存在,则使用额外的外壳欺骗仅在换行符处中断(假设路径名中没有换行符)。

如果你一直在小心翼翼地上演一些但不使用git add -p一些文件的所有,它通常可能,这些使用git fsck --lost-found,并通过所有产生的“晃来晃去斑点”戳来恢复,但这是很不值得的努力。

+0

感谢您的答案。 – BeginnersSake

看来这应该工作: git reset -p <file_name>