Git互动非舞台

Dzi*_*mid 53 git

git add -p阶段变化并git checkout -p以交互方式丢弃变更.如何通过帅哥从索引中取消更改?

(我认为git unstage -pgit reset HEAD -p可能会奏效.)

man*_*lds 61

如果我没有弄错的话,你想要的是以交互方式取消爵士乐?我以为git reset -p是这样的.它的提示信息甚至完全像Unstage this hunk?

同样来自手册:

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

  • 很高兴知道:反向使编辑模式(e)有点奇怪.所有加号(+)行都将取消暂停.如果您不想取消暂停,请删除加号 - 编辑模式下的文档不清楚.如果您决定在编辑器中取消操作并在不保存的情况下将其关闭,这在某种程度上是危险的 - 这导致整个大块 (4认同)
  • @Dziamid根本没有什么可耻的。我不认为reset应该与add相反,甚至它们是伪命名为stage / unstage的,这不是很明显。但幸运的是,您完成了提出问题的重要任务!(尽管有点笨拙,因为您似乎已经知道答案了) (2认同)

LHM*_*LHM 6

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

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

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

Unstage this hunk [y,n,q,a,d,g,/,j,J,k,K,s,e,?]?
Run Code Online (Sandbox Code Playgroud)

以下是每个选项的说明:

  • 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. 
Run Code Online (Sandbox Code Playgroud)

为清楚起见进行了修改:

  • 以 开头的所有行+都是当前暂存的要添加的行,现在将取消暂存。为了防止+被取消暂存(即将它们保留为暂存更改),请+用空格字符替换首字母。
  • 以 开头的所有行-都是当前暂存要删除的行,现在将取消暂存。为了防止-被取消暂存(即将它们保留为暂存更改),请完全删除每一行。
  • 所有带有 # 的行都是注释行,不会影响提交的内容。
  • 也许还要记住@Daniel-Alder 的评论,以避免意外取消整个大块。

之后,您可以使用:

  • git diff --staged检查您是否取消暂存/暂存正确的更改
  • git add -p舞台上错误地删除了帅哥
  • git commit -v在编辑提交消息时查看您的提交。

未来参考:Git 工具 - 交互式暂存

  • 这是一个很好的答案。特别注意**手动编辑注意事项** (2认同)