git format-patch
如何使用git命令,将其它项目的提交Commit 打 补丁到本项目,保留提交的时间 等日志信息、
以下是chatGPT的回答。
方法一:使用 git cherry-pick¶
-
获取另一个项目的提交哈希:
-
在另一个项目的分支中,找到目标提交的哈希值(
commit hash)。假设目标提交的哈希为
abc1234。 -
在当前项目中添加另一个项目的远程仓库:
-
添加另一个项目为远程仓库:
这样,你就能访问另一个项目的分支和提交记录。
-
使用
git cherry-pick: -
将目标提交引入当前分支,同时保留原始时间、作者信息等:
-
如果你需要引入多个提交,可以指定多个
,或者使用一个范围:
-
解决冲突(如有):
-
如果在
cherry-pick的过程中遇到冲突,可以按照以下步骤解决:手动解决冲突后,添加解决冲突的文件:
-
如果想中止操作:
-
清理远程仓库(可选):
-
如果已经完成了需要的操作,可以删除添加的远程仓库:
方法二:使用 git format-patch 和 git am¶
这是一种更通用的方法,可以生成补丁文件并应用到当前项目。
第一步:在另一个项目中生成补丁文件¶
- 进入另一个项目的目录:
-
使用
git format-patch生成补丁文件: -
生成某个提交的补丁:
这会在当前目录生成一个 .patch 文件(如0001-some-message.patch)。
-
如果需要生成多个提交的补丁:
这会生成从
start-commit(不含)到end-commit(含)的所有提交的补丁。 -
将生成的
.patch文件复制到当前项目中。
第二步:在当前项目中应用补丁¶
- 进入当前项目的目录:
-
使用
git am应用补丁: -
应用单个补丁文件:
-
如果有多个补丁文件,可以使用通配符一次性应用:
-
解决冲突(如有):
-
如果应用补丁时发生冲突,
会暂停并提示冲突文件:
手动解决冲突后:
-
如果要中止操作:
方法三:使用 git diff 和 git apply (仅复制更改而不保留提交日志)¶
如果你不需要保留原始提交的作者、时间等信息,而只是想要应用更改,可以使用以下方法:
- 在另一个项目中生成差异文件:
- 在当前项目中应用差异文件:
这不会生成新的提交,需要手动创建提交。
比较三种方法¶
| 方法 | 是否保留提交日志 | 是否适合多个提交 | 是否需要远程仓库 |
|---|---|---|---|
git cherry-pick | 是 | 是 | 是 |
git format-patch 和 git am | 是 | 是 | 否 |
git diff 和 git apply | 否 | 是 | 否 |
如果需要完整保留提交信息,建议使用 git cherry-pick 或 git format-patch 和 git am。