繁体   English   中英

Git 交互式 unstage 文件的一部分或由大块头

[英]Git interactive unstage part of a file or by hunks

git add -p用于git checkout -p更改, git checkout -p以交互方式丢弃更改。 我怎样才能取消对索引的更改?

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

如果我没记错的话,您想要的是交互式地取消大块头吗? 我认为git reset -p正是这样做的。 它的提示信息甚至就像Unstage this hunk?

同样来自手册:

这意味着 git reset -p 与 git add -p 相反,即您可以使用它来选择性地重置大块头。 请参阅 git-add(1) 的“交互模式”部分以了解如何操作 --patch 模式。

我发现这个答案在学习登台时非常有帮助,所以我想我会修改它以取消登台,因为我还没有在 stackoverflow 上找到一个关于“如何取消登台一行或部分文件?”的完整答案。 题。

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

然后 Git 会提示你这个问题的一个变体:

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

以下是每个选项的说明:

  • Ÿunstage从这个大块头下一提交
  • n为下一次提交准备这个大块头
  • Q退出; 不要取消这个大块头或任何剩余的大块头
  • 一个unstage这个大块头和文件中的所有后来的帅哥
  • 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 的评论,以避免意外取消整个大块头。

之后,您可以使用:

  • git diff --staged以检查您是否已取消暂存/暂存正确的更改
  • git add -p错误地删除了大块头
  • git commit -v可在您编辑提交消息时查看您的提交。

未来参考: Git Tools - Interactive Staging

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM