当前位置:   article > 正文

Git生成patch及打patch到源代码_git生成patch文件

git生成patch文件

1.每个commit生成1个patch

1.1.创建patch 文件的常用命令行

1.1.1.某次提交(含)之前的几次提交

git format-patch [commitid] -n
n 表示从指定id对应的commit开始算起n个提交。
eg:
git format-patch  xxxx -2
  • 1
  • 2
  • 3
  • 4

1.1.2.某个提交的patch

git format-patch [commitid] -1
eg:
git format-patch commitid -1
  • 1
  • 2
  • 3

1.1.3.某两次提交之间的所有patch

git format-patch  [commitid1] [commitid2]
  • 1

1.1.4.创建diff文件的常用方法

git diff  [commitid1] [commitid2] >  文件名称.diff
  • 1

2.多个commit生成1个patch

2.1.基于当前分支创建一个新的分支

$ git checkout -b dev  
Switched to a new branch 'dev'  

$ git branch   
* dev  
  master  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.2.使用git log查看提交的历史记录日志。

2.3.使用git reset 命令彻底回退到初始化版本

$ git reset --hard 3c5fef11eb9389f3575f8a11dda2deb3b79aa126  
HEAD is now at 3c5fef11eb9389f3575f8a11dda2deb3b79aa126 add test.sh 
  • 1
  • 2

此时执行git log发现之前的提交历史已经没有了

2.4.使用git merge

$ git merge master --squash  
Updating 3c5fef1..9fdd76e  
Fast-forward  
Squash commit -- not updating HEAD  
 first.c |    7 +++++++  
 1 file changed, 7 insertions(+)  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

--squash选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不保留待合并分支上的历史信息,也不提交、不移动HEAD,因此需要一条额外的commit命令。其效果相当于将another分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来。
判断是否使用–squash选项最根本的标准是,待合并分支上的历史是否有意义。

2.5.再编辑一下commit信息

$ git commit -m "add a program--printf hello world"  
[dev 50dc073] add a program--printf hello world  
 1 file changed, 7 insertions(+)  
  • 1
  • 2
  • 3

此时dev 分支文件与 master 分支一样。
可以用 git format-patch制作补丁

2.6.生成patch

$ git format-patch HEAD^  
0001-add-a-program-printf-hello-world.patch  
  • 1
  • 2

3.如何运用生成的patch打回源代码

3.1.检查patch/diff是否能正常打入

git apply --check 【path/to/xxx.patch】
git apply --check 【path/to/xxx.diff】
  • 1
  • 2

3.2.打入patch/diff

git apply 【path/to/xxx.patch】
git apply 【path/to/xxx.diff】
或者
git  am 【path/to/xxx.patch】
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/641206
推荐阅读
相关标签
  

闽ICP备14008679号