2010-02-01 96 views
9

我喜欢使用git add --patch(以及最近的git add -i)来解开我的提交以及验证我正在提交的内容是好用使用git以交互方式删除Hunk add --patch

有一段时间我会碰到一个可能是错误日志语句,一个额外的换行符(通常是擦除前面提到的日志语句)的大块 - 我实际上宁愿完全删除它。

我不想登台,我还想简单地删除那个有问题的人,而它正好在我的面前(而不是跳回到我的编辑器并再次尝试)。我想要对我的工作文件应用更改。

有没有办法做到这一点?


我认为是使用编辑块功能。

这与下面提出的建议hash一起使我获得的工作流程略好于我现在的工作流程。

我同意这违反了git add的关注点分离。 OTOH它只是如此方便; P我听起来像我的老板;)

+1

目前,答案是 “否”。尽管如此,能够使用add -i和枚举hunks会是很好的功能。例如,而不是每个大块的是/否,您可以生成一系列补丁,然后提交会提示输入多个日志消息。或者如果你有'舞台/无舞台/藏起来'这样的选择,而不是'舞台/不舞台'或'藏起来/不要藏起来'(通过存储-p) – 2010-02-01 14:07:52

+0

是的,我认为'git add'并不是一种编辑工作树文件的方式,虽然你是对的,但如果能够在你身边的时候照顾它,这将是一件好事。 – Cascabel 2010-02-01 16:12:28

+1

我一直以为在add -i期间有1-9的选项会很酷。选择'1'会将第一个提交添加到第一个提交中,依此类推。这将支持您可以将所有这些评论更改放在'1'中的工作流程,即''2中的fizzbuzz特性等,并且您不想在'9'中搜索。一次通过。然后放弃最后一次提交。你必须弄清楚如何获取提交消息,但它肯定会有用。 – 2014-06-12 20:22:57

回答

5

比使用复位硬HEAD,在提交所有有效的hunk之后,您可以将git checkout文件重置为当前分支中记录的内容。这样它不会影响任何其他文件。

0

你可以添加索引任何你想要的,提交,然后重置硬头,然后什么不在索引中丢失。

+0

这不是一个真正的解决方案。 OP提到解除提交,因此可能会在工作树中进行其他所需的修改,即重置/隐藏会被杀死。 – Cascabel 2010-02-01 16:15:15

+0

他可以做什么来得到他想要的,而不是他想做什么,是的。 – hash 2010-02-01 20:15:48

1

有一个彻底的解释,为什么git add不会从Git维护者Junio on the Git mailinglist响应某个特性请求做到这一点。

短版他的替代过程:

# start from N-commit worth of change, debug and WIP 
git stash save -p debug ;# stash away only the debugging aid 
# now we have only N-commit worth of change and WIP 
git stash save -p wip ;# stash away WIP 

git add -p ;# prepare the index for the next commit 
git stash save -k ;# save away the changes for later commits 

git commit