假设我们刚刚更改了某个文件中的某些 CSS,并且想要使用 Git 对其进行暂存。 您可能会执行以下操作
git add styles.css
…然后,我们希望使用已暂存的代码进行提交
git commit -m "Fixed the CSS"
我已经这样做了很长时间,但这种方法有很多问题。首先,如果您在 `styles.css` 中更改了不止一件事会发生什么?也许我们更改了某个元素的边框,然后又更改了与第一个元素完全无关的某个元素的背景颜色。好吧,如果我们运行 `git log`,则很难理解提交的历史记录。
这就是 Git 的补丁模式发挥作用的地方。它是一个非常有用的标志,它允许我们将文件的各个部分拆分,以便我们可以分别暂存和提交每个部分。
git add -p styles.css
运行该命令后,我们应该会看到类似以下内容

我们在两个不同的元素上进行了两次更改,但存在各种可以在称为“块”的内容上运行的命令。我们在这里看到的是代码库的一部分或一个块,但要查看所有这些命令的含义,我们只需键入 `?` 即可。这将为我们列出所有命令

在本例中,我们所做的两处更改当前属于同一个块,因此我们需要通过键入 `s` 将其拆分。

现在我们可以看到,只有 `。table` 类上的更改已被选中,这正是我们想要的。然后,我们只需键入 `y` 即可暂存该块。但是,git 会提供给我们暂存更多块的选项,这在我们对代码库的不同部分进行类似更改时非常有用。但是,在这种情况下,我们只想退出此过程,因此我们需要运行 `q`。
当我们在命令行中键入 `git status` 时,这一切都更有意义;我们将看到我们已从 styles.css 中添加了一些代码,如果我们运行 `git diff styles.css`,我们将看到只有一行 CSS 已被暂存

剩下的就是进行提交,同时确保为将来参考编写一些难忘的内容,例如
git commit -m "fixed the border of the form"
这样,我们就可以扫描我们的提交历史记录并更容易地理解它。
Git 的补丁模式万岁!
精彩的文章!我已经看到使用它的好方法了。我太喜欢 git 了!
顺便说一句,存储也一样 :)
git stash -p
不错!感谢您的提示,这对我来说非常有用。
太酷了
非常有用的技巧,很高兴看到它在命令行级别进行了描述。在 SourceTree(我强烈推荐!)等工具中,它的工作方式大致相同。
我赞同 SourceTree 的推荐。块的半图形显示非常易于理解,并且可以选择要暂存或丢弃的块。您还可以通过更改差异面板正上方的“上下文行数”下拉列表来更改大多数块的大小(类似于本文示例中的 `s` 命令)。
是的,我之前发布过非常类似的文章。 https://pawelgrzybek.com/git-tip-staging-hunk-of-code-via-command-line/ 在这样做了一段时间后,我不得不承认,每当需要拆分提交时,我都会启动我最喜欢的 GUI git 客户端 - Tower 2(目前正在打 7.5 折,值得一看: https://www.git-tower.com/)。谢谢
你的文章实际上更清晰 :-)
我过去常常切换到 SourceTree 等第三方客户端来执行此操作。现在我可以在命令行中执行此操作。太棒了!
几个月前我从命令行切换到 Source Tree,并在几周前注意到了这一点。我以为这是 Source Tree 独有的功能。
我的所有提交都已使用补丁进行了相当长的一段时间。另一件很棒的事情是,它允许您查看您实际提交的内容,您可以看到您的 console.log()、剩余的注释、凌乱的空格等。
很棒的文章!!使事情更有条理和清晰!
在 Mac 上,Gitx 使这变得非常容易 - 它比 sourcetree 更轻量级,而且是开源的(不需要 Atlassian 帐户!)
原始版本已失效,但 gitx-dev 分支 更新了。