Git互动非舞台

时间:2011-09-07 16:02:53

标签: git

git add -p进行更改,git checkout -p以交互方式放弃更改。如何通过帅哥从索引中取消更改?

(我认为git unstage -pgit reset HEAD -p可能有用。)

2 个答案:

答案 0 :(得分:55)

如果我没有弄错的话,你想要的是以交互方式取消爵士乐?我认为git reset -p就是这么做的。它的提示信息甚至与Unstage this hunk?

完全相同

同样来自手册:

  

这意味着git reset -p与git add -p相反,即你   可以用它来有选择地重置帅哥。请参阅“交互模式”   git-add(1)部分学习如何操作--patch模式。

答案 1 :(得分:0)

我发现this answer在学习分期时非常有用,因此我认为我将其修改为不分期,因为我没有在stackoverflow上找到关于“如何git unstage一行或一部分内容的完整答案”。一份文件?”题。

正如@manojlds所说,您可以使用git reset --patch <filename>(或简称为-p),而git会开始将您的文件分解为它认为合理的“大块”(文件的一部分) )。

Git然后将提示您此问题的变体:

Unstage this hunk [y,n,q,a,d,g,/,j,J,k,K,s,e,?]?

以下是每个选项的说明:

  • y 从下一次提交中取消此大块
  • n 将此块暂存以进行下一次提交
  • q 退出;不要撤消该大块或其余任何大块
  • a 取消对此大块的暂存,并在文件中将所有以后的大块暂存
  • d 请勿取消暂存此文件或文件中以后的文件。
  • g 选择一个大块头去
  • / 搜索与给定正则表达式匹配的块
  • j 尚未确定该大块,请参阅下一个未确定的大块
  • J 不确定这个大块,请看下一个大块
  • k 尚未确定此大块,请参阅先前未确定的大块
  • K 尚未确定此大块,请参阅先前的大块
  • s 将当前大块拆分为较小的大块
  • e 手动编辑当前大块
  • 打印块帮助

关于 e 手动编辑的注意事项:在使用上面的编辑(e)模式时,要格外小心,因为它不直观。我将包含然后修改内联git文档:

# To remove '+' lines, make them ' ' lines (context).
# To remove '-' lines, delete them.                
# Lines starting with # will be removed. 

为清楚起见而修订:

  • 所有以+开头的行都是当前已暂存的行,现在将取消暂存。为了防止+被撤消(即,将它们保留为已进行阶段的更改),请用空格字符替换开头的+
  • 所有以-开头的行都是当前暂存为要删除的行,现在将取消暂存。为了防止-被取消登台(即,将它们保留为已登台的更改),请完全删除每行。
  • 所有带有#的行均为注释行,不会影响提交的内容。
  • 也许还请记住@ Daniel-Alder的comment,以避免无意间取消整个结块的演出。

之后,您可以使用:

  • git diff --staged,以检查您是否取消转储/转储正确的更改
  • git add -p上演被误删除的帅哥
  • git commit -v在编辑提交消息时查看您的提交。

对未来的参考:Git Tools - Interactive Staging