git 使用总结
生成patch
git diff:生产本次modify的内容
#只想将test.c 文件的modify 生成patch文件
git diif test.c > test.c.patch
将所有modify 文件生成patch文件
git diff > all.patch
git format-patch:生成commit的内容
生成最近1次的commit的patch
git format-patch HEAD^
生成最近2次的commit的patch
git format-patch HEAD^^
生成最近3次的commit的patch
git format-patch HEAD^^^
生成最近4次commit的patch
git format-patch HEAD^^^^
将两个commit以及中间的所有commit生成patch
git format-patch <commit1_hash>..<commit2_hash>
生成单个commit的patch
git format-patch -1 <commit_hash>
将某个commit(不包括)之后的提交,打成patch
git format-patch <commit_hash>
将某个commit(包括)之前的所有提交,打成patch
git format-patch --root <commit_hash>
打patch
检查patch
查看patch的情况
git apply --stat xx.patch
检查patch与当前分支合并时,是否有冲突
git apply --check xx.patch
git apply 对应 git diff
打上新来的改动
git apply xx.patch
git am 对应 git format-patch
合并新来的commit patch
git am *.patch
合并时,签上打patch人的名字
git am --signoff *.patch
放弃本次打的patch
git am --abort
当git am 失败,解决完冲突后,接着执行未完成的patch
git am --resolved
git apply 与 git am的区别
git apply
只更新改动内容,打完之后需要自己git add
和git commit
git am
是更新的commit,会将commit的所有信息打上去,author也是patch的author而不打patch的人。
打patch发生冲突
如果不想打这次patch了,直接git am --abort
。
如果还想继续,采用以下方法:
- 根据git am失败的信息,找到发生冲突的具体patch文件,然后
git apply --reject <patch_name>
,发生冲突的部分会保存为patch_name.rej文件; - 根据patch_name.rej文件,修改该patch文件来解决冲突;
- 执行
git am --abort
命令,取消第一步的操作; - 再重新执行
git am *.patch
命令即可
从别的分支里挑出某个commit进行合入
git cherry-pick commit_hash