在git中有一种方法可以将单个文件中的更改拆分为两个提交吗?

Is there a way in git to split up changes in a single file into two commits?

本问题已经有最佳答案,请猛点这里访问。

所以我在我的文件: P / < >

1
2
3
4
5
6
7
8
9
...

some code here..

...

some unrelate code here..

...

和我使它到以下的变化: P / < >

1
2
3
4
5
6
7
8
9
...

some code here that needs to be changed a bunch..

...

some unrelated code here..

...

让我们说,我在中间的一些变化significant *的第一部分和我的通知"的typo在以后的部分。我想typo和固定的承诺和可能马上推,但我仍然知道,我第一次读到海岸,不分享它。显然我可以用Gi藏匿或做一个intermediate承诺和固定的typo在另一个分支,但也有任何方式的只添加一些英语的变化都在文件的中转区。显然我不能unfix的typo,然后git add myfilerefix的typo但如果typo固定也更复杂,可能会annoying种。也有一种方法来specify有在文件,我想给我与git add吗? P / < >


-p标志允许您选择要添加的文件部分。这里有一个流行的问题,它提供了关于补丁标志的更多细节。


从终端上,可以使用git add --patchgit add --interactive选择性地将更改分阶段提交,即使在同一个文件中也是如此。

如果您愿意使用图形工具,git gui允许您通过右键单击diff选择性地进行分级,使用"stage hunk for commit"命令,如果选择了行,"stage lines for commit"命令。


交互式分段

1
git add --interactive

将允许您从编辑的文件中选择阶段块。

隐藏更改

如果你有一点远见,你可以

1
2
3
4
5
git stash save 'typos'
// edit file
git commit -am 'fix'

git stash pop

临时"存储"的打字错误修复(也就是说,在其他VCSE中被搁置)将被合并回您的工作副本中。

如果你有兴趣使用VIM的话,VIM的逃犯有更强大的能力。