如何以交互方式下台git中的特定块?


106

在git中,如果我在索引中暂存的同一个文件中有两个块,那么如何交互地暂存其中一个?

除了暂存整个文件,然后重新暂存要保留的块,或者手动撤消对工作副本的更改,然后以交互方式添加那些未完成的更改,还有其他选择吗?

Answers:


135

尝试git reset --patch filename; git add --patch根据文档,这应该与之相反。简写形式-p也适用于两个命令。


我不认为我的版本有它(1.6.3.3),但这看起来像是正确的答案。
Andrew Grimm'3

2
在这种情况下(并假设您由于某种原因无法升级),建议您使用git stash save --keep-index保存和重置当前工作副本更改。然后,您可以重置文件并撤消不需要的更改。如果首先将文件复制到某个临时位置,则可以diff用来保存撤消的更改。然后,您可以再次添加文件(无需交互添加,因为您隐藏了其他您不感兴趣的更改)。用于git stash pop取回旧更改,并diff应用您撤消的更改。相当麻烦……:-(
Aasmund Eldhuset 2011年

The short form -p also works for both commands...你的意思是git reset -p filename
纳瓦兹

1
@Nawaz:是的- git add -p filename有选择地从该文件中git reset -p filename转移更改,并有选择地撤消更改。还有git checkout -p -- filename,可以让您有选择地丢弃文件中的更改。警告:addreset都可以用来撤消两者中的另一个,但是如果使用这种形式的checkout放弃更改,则无法将其取回。
Aasmund Eldhuset

2

git gui具有不错的GUI,可以交互式地上演或不上演大块或线条。有更好/更好的GUI客户端,但是它们git gui是轻量级的,内置的和跨平台的(lin,win,mac)。

https://git-scm.com/docs/git-gui

只需右键单击大块即可上台/下台。对于线条,请先突出显示线条,然后单击鼠标右键。


-1

GitX有一个不错的UI,用于取消暂存文件的大块: 在此处输入图片说明

官方客户端已经有一段时间没有得到维护了,但是在GitHub上有更多功能的分支很流行。(有关它的博客文章


1
对于在那里的Windows用户,Git Extensions具有类似的UI。
Aasmund Eldhuset 2011年

4
内置的也是如此git gui,除非我不确定我是否会使用“ nice”一词;)
MatrixFrog 2011年

1
SourceTree(Windows + Mac)也为此提供了一个不错的UI。
chrnola 2014年

我现在应该提一下最近的图形化Git客户端-GitKraken很漂亮,并且对此表示支持(尽管现在它要为商业用途支付高额费用)。GitHub的GitHub桌面免费,美观,并支持轻松暂存和取消暂存。GitKraken和GitHub Desktop都是跨平台的,但都不是开源的。
jdgregson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.