Git基本操作
.gitignore
1 | # no .a files |
patch
生成 patch
git diff
1 | #只想 patch Test.java 文件 |
git format-patch
1 | git format-patch HEAD^ #生成最近的1次commit的patch |
应用 patch
git am
- 直接将patch的所有信息打上去,而且不用重新git add和git commit,author也是patch的author而不是打patch的人。
1
2git am --abort # 当git am失败时,用以将已经在am过程中打上的patch废弃掉(比如有三个patch,打到第三个patch时有冲突,那么这条命令会把打上的前两个patch丢弃掉,返回没有打patch的状态)
git am --resolved # 当git am失败,解决完冲突后,这条命令会接着打patch
git apply
- git apply并不会将commit message等打上去,打完patch后需要重新git add和git commit。
检查 patch 情况
1 | git apply --stat 0001-limit-log-function.patch # 查看patch的情况 |
冲突处理
方式一(编辑冲突的 patch 文件)
- 根据git am失败的信息,找到发生冲突的具体patch文件,然后用命令git apply –reject
,强行打这个patch,发生冲突的部分会保存为.rej文件(例如发生冲突的文件是a.txt,那么运行完这个命令后,发生conflict的部分会保存为a.txt.rej),未发生冲突的部分会成功打上patch - 根据.rej文件,通过编辑该patch文件的方式解决冲突
- 废弃上一条am命令已经打了的patch:git am –abort
- 重新打patch:git am ~/patch-set/*.patchpatch
方式二(编辑冲突的源码)
- 根据git am失败的信息,找到发生冲突的具体patch文件,然后用命令git apply –reject
,强行打这个patch,发生冲突的部分会保存为.rej文件(例如发生冲突的文件是a.txt,那么运行完这个命令后,发生conflict的部分会保存为a.txt.rej),未发生冲突的部分会成功打上patch - 根据.rej文件,通过编辑发生冲突的code文件的方式解决冲突
- 将该patch涉及到的所有文件(不仅仅是发生冲突的文件)通过命令git add
添加到工作区中 - 告诉git冲突已经解决,继续打patch: git am –resolved (git am –resolved 和 git am –continue是一样的)
强制打 patch
1 | git apply --reject xxx.patch |