问题标签 [git-patch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
196 浏览

git - 来自几个(不是全部)未暂存文件的 Git 补丁

我阅读了有关git patch命令的内容,但所有示例都显示了如何为所有未暂存或缓存的文件,甚至是某些提交包含的所有文件(从一个提交到另一个提交)获取补丁。但是假设我有10 个未暂存的文件,我需要为其中的 6 个创建一个适当的补丁。我怎样才能做到这一点?如果有办法创建这样的补丁,我该如何应用它? 很抱歉,如果很明显。

0 投票
2 回答
316 浏览

git - git:以编程方式撤消修改后的邮递员集合中的特定更改

我在 git 中使用邮递员集合。Postman 做的很多事情都很好,但是导入时发生的 id 再生并不理想。

本质上是导入一个邮递员集合,然后再次导出它会导致每个人都发生变化id

例如输出git diff-index -p HEAD --

我想检查文件中的更改并撤消所有 id 更改,但保留所有其他更改。

本质上,我想通过更改 id 自动运行对每一行的git add -p {my_postman.collection.json}回答。n

我可以看到Git 命令以编程方式将文件的一系列行添加到索引中?正在朝着正确的方向前进,并使 git在提交之前自动删除尾随空格

0 投票
1 回答
207 浏览

git - 从补丁中删除索引标题行的含义

语境

我有一个 git 存储库(“父存储库”),其中包含我在另一个存储库(“内部存储库”)中.patch使用生成的文件。git diff --binary sometag父仓库是公开的并且对拉取请求开放。根据文档,该文件包含每个更改的标题行,如下所示:

index <hash>..<hash> <mode>

这意味着每次两个协作者接触同一个文件时(即使在完全不同的行中),生成的哈希也会不同,因此索引头会发生变化,从而导致可以避免的合并冲突。

我试图删除这些索引标题,git apply但似乎仍然可以正常工作。

问题

删除索引标题行是否有任何(隐藏的)影响?它会导致二进制文件出现问题吗?

我假设该git apply工具将出于优化原因仅查看哈希值。即:“当你已经有了结果文件时,不要打扰差异”。

我知道模式标头通常嵌入在索引标头中,出于我的目的,可以缺少此信息。

0 投票
1 回答
65 浏览

git - 如何通过 git patch 添加新的 git 存储库文件

有两个存储库:project-version-1 和 project-version-2。

  1. project-version-1 目录有文件:calculator/src/add.ccalculator/src/subtract.ccalculator/src/multiply.c,它不支持某些功能(比如除法运算)

  2. project-version-2 已修复。但修复是在新文件上说calculator/src/division.c

问题 :

我必须从 project-version-2 git 存储库向 project-version-1 提供补丁(修复)。补丁应该是一个单一的差异文件。我们不能要求客户做“git add new-file”等。我如何为此生成补丁?

0 投票
1 回答
17 浏览

git - 如何使用父 SHA 创建一个 git 补丁,以便它可以用作存档?

想象一下,我正在 git repo 上的一个探索性分支上工作,它只有一个提交。我决定很快就不需要我的工作,并且我不想创建分支/标签。事实上,我想丢弃这些更改,但以防万一我再次需要它们,我想保存一个补丁。

就本文而言,假设我只有一个要存档的更改:

我提出的存档解决方案如下:

  1. 创建一个提交补丁040cc7c
  2. 将补丁文件存档在某处以进行长期存储。
  3. ExperimentalBranch从 repo 中删除。

到目前为止,一切似乎都很好,直到几年后我可能想要恢复补丁。它可能会引用不兼容且无法应用的文件/行。为了解决这个问题,我可以查看补丁的父 SHA 并将其应用到那里。

因此,我提出的非归档解决方案如下:

  1. 结帐 SHA a29ceb7
  2. 应用补丁。

唯一的问题是,当我创建补丁时,我看到它包含 SHA 040cc7c,但没有提及a29ceb7任何地方。040cc7c在我创建补丁之后的几年里,我可能很难找出父级。此外,因为几年前我删除了分支,我不希望有一个 git 命令可以帮助我发现父级。

创建补丁时,是否有办法确保其父 SHA 也包含在文件中?


我目前的解决方法是重命名补丁以包含父级的 SHA,但这很容易忘记,而且更手动。

0 投票
0 回答
86 浏览

git - 从 git 存储库为目标目录创建补丁或差异文件,并将其应用于具有不同目录的另一个不同 git 存储库

是类似的问题。

但我只想从当前目录提交并完全删除相对路径或更改路径

例如通过这样做:

我得到带有ext/DbAccess/Mojolicious/Command/db_env.pm路径的补丁。但我想要Mojolicious/Command/db_env.pm,因为我目前在ext/DbAccess目录中。

这可能吗?

0 投票
0 回答
48 浏览

git - 是否可以撤消“git add”并转到与以前完全相同的暂存索引?

我试图将我的工作分成多个提交。我已经这样做了:

我不应该添加该文件,因为我的更改已经在暂存索引上。我可以回到那个状态(--->如上标记)吗?

0 投票
1 回答
71 浏览

git - 补丁应用后自动合并与冲突

我有几个带有“完全相同”的 package.json 和几个配置文件的存储库。我在一个存储库中进行了更改,并希望将这些更改传播到其他存储库。我设法按照以下说明做了正确的事情:

  1. git format-patch HEAD^(来自有变化的仓库)
  2. git remote add patch repo/with/changes(来自需要更改的 repo)
  3. git fetch 补丁(来自需要更改的仓库)
  4. git am -3 path/to/patch/patch --ignore-whitespace --ignore-space-change (来自需要更改的仓库)
  5. 手动合并冲突(可视化工具)

问题出在最后一步——我也想自动化这一步。是否可以定义一些合并策略,例如“在与补丁连接的行上合并我们的,在所有其他冲突的行上合并他们的”?我在 package.json 文件上有相当简单的冲突,其中冲突的行来自补丁(我希望这些有),或者来自某些包的包名和版本(我希望它保持原样用于包)。

我知道,最好想办法避免重复并将类似文件移动到某个共享包中,但是我不知道如何为“package.json”之类的部分做到这一点,以及是否值得。对此问题的任何建议也非常感谢,但主要关注点仍然是补丁的“现状”问题。或者也许其他一些方法可以在不同回购的几乎一致的部分上传播变化。

我想自动合并的示例如下所示(例如,在 package.json 中,其他文件合并时没有冲突并从补丁中获取更改,但我猜在其他情况下,其他文件中也可能存在类似问题)

从第一个回购(补丁来源)

从第二个回购

0 投票
2 回答
79 浏览

git - 如何查看将要提交的文件

我在我的目录中修改了一个文件(或一些文件),并且我习惯于git add从文件中暂存一些更改行,但不是所有更改的行。

我可以git diff --staged my-file用来查看更改的差异。 git diff --staged my-file忽略已更改但未上演的行。这是输出的示例git diff --staged my-file

问题:如何生成将要提交的文件的文本?我想要一个签入挂钩,以便在允许提交之前最终处理该文件。

我怀疑有一些简单的咒语使用git apply。但是,简单的使用git apply会产生以下诊断消息。

我有一个似乎太复杂的解决方案。

  1. 生成 .patch 文件git diff --staged > my-file.patch
  2. 保存原件cp my-file my-file.save
  3. 隐藏更改git stash save my-file
  4. 应用补丁git apply my-file.patch
  5. 保存了所需的结果cp my-file my-file.to-commit
  6. 将文件恢复到预添加状态mv my-file.save my-file
  7. 将字段恢复到添加后状态git stash apply

现在,my file.to-commit是要提交的填充副本。这真的是正确的方法吗?看来我做的工作太多了。

0 投票
1 回答
119 浏览

git - Git将补丁应用于git repo之外的特定文件

我有两个文件,x_original.txtx_updated.txt.

我使用以下命令获取补丁文件:

我现在想将此补丁应用到一个名为x.txt.

以下是值得注意的:

  • x.txt不在 git repo 中
  • 文件名x_original.txtx_updated.txt包含在fix_something.patch其中没有意义,因为当我应用补丁时这些文件将不存在

我可以使用什么 git 命令来应用这个补丁?或其他实用程序(如有必要)?我应该对补丁文件进行哪些修改?