【问题标题】:Get git patch of current modified files获取当前修改文件的 git 补丁
【发布时间】:2023-03-03 02:08:02
【问题描述】:

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

【问题讨论】:

  • 你的问题是什么?
  • 一个补丁描述了状态 A 和状态 B 之间的差异。在你的情况下你能更具体地了解 A 和 B 吗?您的意思是针对初始提交和HEAD 之间差异的补丁吗?

标签: git patch


【解决方案1】:

制作补丁

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

git diff > my-changes.patch

此补丁只是一个文件,因此您可以通过电子邮件将其发送给某人或将其保存在 U 盘上或做任何您想做的事情(我不确定您为什么需要这样做,但是你可以)

然后,补丁可以通过

git apply my-changes.patch

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

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

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

这将创建自 &lt;start commit&gt; 以来所有更改的补丁。您还可以将&lt;start commit&gt; 指定为分支、标签(指特定的提交)或特定的东西,例如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 &lt;your changes&gt; &amp;&amp; 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。初学者通常不需要这样做。

【讨论】:

  • “所有人都可以访问的合作者” 任何人怎么能如此轻松地修改他人的财产或财产?请帮忙解释清楚
  • 通常来说,如果是团队合作,例如公司或学校作业,每个人都可以访问。许多托管服务提供商也有办法设置不同的访问层。例如,大多数人可能没有强制推送的权限,或者可能只被允许推送到特定的分支。
猜你喜欢
  • 2011-03-22
  • 1970-01-01
  • 2012-12-10
  • 2015-05-21
  • 2011-04-14
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 2013-04-14
相关资源
最近更新 更多