制作补丁
您只需将git diff 的输出保存到文件中,即可创建一个代表所有未提交更改的补丁:
git diff > my-changes.patch
此补丁只是一个文件,因此您可以通过电子邮件将其发送给某人或将其保存在 U 盘上或做任何您想做的事情(我不确定您为什么需要这样做,但是你可以)
然后,补丁可以通过
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 中协作,正确的方式
共有三种典型的协作方式,我将按照从最简单到最高级的顺序列出。
方法一:多个协作者,谁都有访问权限
这是您在学校或大多数工作环境中会看到的最典型的情况。每个人都可以将代码推送到同一个存储库。
在您的机器上拥有该 repo 的副本后,工作流程如下所示:
-
对代码进行更改或更新
-
提交您的更改:git add <your changes> && git commit
您可以在上传之前进行任意数量的提交。最好的办法是每次完成一段重要的代码(如函数或类)时进行少量提交。
-
下载远程更改:git pull
如果您的合作伙伴或同事已使用更改更新了存储库,则您必须在推送之前执行此操作。这使您可以检查以确保您的更改适用于他们的更改。
-
上传您的更改:git push
方法二:你在做别人的开源项目
您并不总是能够直接推送您的更改。例如,如果您正在开发一个开源项目,您通常会提交更改以供审核,而维护者将负责合并它们。
这通常通过派生项目、进行更改、将更改上传到存储库(派生版本),然后提交拉取请求以将更改集成回原始项目来完成。
看起来像这样:
- Fork(在 github、gitlab 或其他服务上
- 将分叉的版本克隆到您的本地计算机上
- 进行更改
- 提交您的更改
- 推动您的更改
- 创建拉取请求以将您的更改合并回(您可以在 github、gitlab 或任何您派生 repo 的地方执行此操作)
方法 3:通过电子邮件将您的提交作为补丁发送
此方法通常用于不希望依赖 github 或 gitlab 等集中式服务的大型、较旧的开源项目。
这是通过使用git send-email 直接从命令行通过电子邮件发送补丁来完成的。 Git 会自动为你创建一个补丁。您所要做的就是指定要作为补丁发送的提交范围。
例如,如果您在名为 dev 的本地分支上进行了更改,那么您可以这样使用它:
git send-email --compose --from=<your email> --to=<their email> master..dev
这里,master..dev 是您要发送的补丁范围。这是dev 分支上的所有补丁,而不是主分支上的补丁。又名,您的更改。
此命令将打开一个文本编辑器,您可以在其中编写电子邮件正文,git 会将补丁附加到电子邮件中,然后发送。
请注意,您必须配置您的电子邮件以使用 git send-email。初学者通常不需要这样做。