获取git个当前修改文件的补丁

Get git patch of current modified files

作为 git 的菜鸟,我不知道如何为当前修改过的文件打补丁,相对于原始文件,即第一个 git 克隆。 任何在这种开发软件版本控制方面经验丰富的专家,主要是 patch 和 diff 作为合作者(在 fork、PR 等中),以便解释正确的方法?

制作补丁

您只需将 git diff 的输出保存到文件即可创建一个代表所有未提交更改的补丁:

git diff > my-changes.patch

这个补丁只是一个文件,所以你可以通过电子邮件将它发送给某人或将它保存在拇指驱动器上或用它做任何你想做的事情(我不确定你为什么需要这样做, 但你可以)

然后,可以通过

应用补丁
git apply my-changes.patch

您通常不需要手动制作补丁,当您确实需要制作补丁时,它们应该始终来自预先存在的提交。

可以从预先存在的提交中制作补丁,如下所示:

git diff <start commit>..HEAD > my-changes.patch

这将创建自 <start commit> 以来所有更改的补丁。您还可以将 <start commit> 指定为分支、标记(指的是特定提交)或特定内容,例如 main~10(表示主分支,10 次提交前)。

# Get a patch of all changes that haven't been pushed
git diff origin/main..main > local-changes.patch

# Get a patch of all changes on feature-branch
git diff main..feature-branch > changes-on-feature-branch.patch

# Get the last 10 commits as a patch
git diff main~10..main > last-10-commits.patch

# Get all the changes since a particular tag
git diff v1.0.0..main > changes-since-v1.0.0.patch

再说一次,您通常不需要手动创建补丁!!! 作为一种工具,git diff 对于探索历史、查看当前更改、看到将被合并的变化,或一百万种其他用途。它以可以直接应用 git apply 的形式输出内容,但我一生中的任何时候都不必手动向某人发送补丁。

在 git 中以正确的方式合作

共有三种典型的协作方式,我将从最简单到最先进的方式列出。

方法 1:多个协作者,他们都有访问权限

这是您在学校或大多数工作环境中最常见的情况。每个人都可以将代码推送到同一个存储库。

在您的计算机上拥有存储库副本后,工作流程如下所示:

  • 更改或更新代码

  • 提交您的更改:git add <your changes> && git commit

    您可以在上传之前进行任意数量的提交。最好的办法是每次完成一段重要的代码时进行小的提交,比如函数或 class.

  • 下载远程更改:git pull

    如果您的合作伙伴或同事用更改更新了存储库,您必须在推送之前执行此操作。这使您可以检查以确保您的更改适用于他们的更改。

  • 上传您的更改:git push

方法二:你在做别人的开源项目

您并不总是能够直接推送您的更改。例如,如果您正在从事一个开源项目,您通常会提交更改以供审查,维护人员将负责合并它们。

这通常是通过分叉项目、进行更改、将更改上传到存储库(分叉版本),然后提交拉取请求以将更改集成回原始项目来完成的。

看起来像这样:

  • Fork(在 github、gitlab 或其他服务
  • 将分叉版本克隆到本地机器上
  • 进行更改
  • 提交您的更改
  • 推送您的更改
  • 创建拉取请求以合并您的更改(您可以在 github、gitlab 或任何您分叉回购协议的地方执行此操作)

方法 3:将您的提交作为补丁通过电子邮件发送

此方法通常用于较大、较旧的开源项目,它们不想依赖 github 或 gitlab 等集中式服务。

这是通过使用 git send-email 直接从命令行通过电子邮件发送补丁来完成的。 Git 会自动为您创建补丁。您所要做的就是指定要作为补丁发送的提交范围。

例如,如果您在名为 dev 的本地分支上进行了更改,那么您将像这样使用它:

git send-email --compose --from=<your email> --to=<their email> master..dev

这里,master..dev 是您要发送的补丁的范围。这是 dev 分支上的所有补丁,不在 master 分支上。即,您的更改。

此命令将打开一个文本编辑器,您可以在其中编写电子邮件正文,git 会将补丁附加到电子邮件中并发送。

请注意,您必须配置您的电子邮件才能使用 git 发送电子邮件。初学者通常不需要这样做。