Git使用ABC
git revert commit-id, 回退某个commit 操作,生成一个新的commit
使用例子,
明尼苏达大学研究人员发布致 Linux 内核社区的道歉公开信
git config --local user.name "your-name"
git config --local user.email "your-email"
git tag, 打标签,打版本
git tag v1.1.1
git tag -a v1.1.1 -m "about this version"
git show v1.1.1
git tag
git push origin --tags
git reset HEAD, 回退代码, commit也回退,重新生成一个新commit
查看共同祖先,三路合并分析
https://git-scm.com/docs/git-merge-base
git merge-base branch1 branch2
git merge-base commit-id1 commit-id2
回退某一个文件:
git checkout -- file 把暂存区的文件恢复到工作区
git reset commit-id file 把已经提交的文件恢复到暂存区
结合 git status, 看下输出信息
更改author, email
这个可以更改HEAD指向的commit
git commit --amend --author="Author Name <email@address.com>" --no-edit
如果 A-B-C-D-F, F指向HEAD, 如何修改commit-C的作者信息呢,
git rebase -i B,然后把C的pick改为edit,然后 :wq
然后会停止(pause)在C这个commit,然后分别运行下面命令即可,
git commit --amend --author="username <abc@qq.com>"
git rebase --continue
git - How to change the commit author for one specific commit? - Stack Overflow
打补丁
git format-patch
git format-patch HEAD^ #生成最近的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 <r1>..<r2> #生成两个commit间的修改的patch(包含两个commit. <r1>和<r2>都是具体的commit号)
git format-patch -1 <r1> #生成单个commit的patch
git format-patch <r1> #生成某commit以来的修改patch(不包含该commit)
git format-patch --root <r1> #生成从根到r1提交的所有patch
git am
git apply --stat 0001-limit-log-function.patch # 查看patch的情况
git apply --check 0001-limit-log-function.patch # 检查patch是否能够打上,如果没有任何输出,则说明无冲突,可以打上
(注:git apply是另外一种打patch的命令,其与git am的区别是,git apply并不会将commit message等打上去,打完patch后需要重新git add和git commit,而git am会直接将patch的所有信息打上去,而且不用重新git add和git commit,author也是patch的author而不是打patch的人)
git am 0001-limit-log-function.patch # 将名字为0001-limit-log-function.patch的patch打上
git am --signoff 0001-limit-log-function.patch # 添加-s或者--signoff,还可以把自己的名字添加为signed off by信息,作用是注明打patch的人是谁,因为有时打patch的人并不是patch的作者
git am ~/patch-set/.patch # 将路径~/patch-set/.patch 按照先后顺序打上
git am --abort # 当git am失败时,用以将已经在am过程中打上的patch废弃掉(比如有三个patch,打到第三个patch时有冲突,那么这条命令会把打上的前两个patch丢弃掉,返回没有打patch的状态)
git am --resolved #当git am失败,解决完冲突后,这条命令会接着打patch
如何用git命令生成Patch和打Patch - 青山牧云人 - 博客园 (cnblogs.com)
- 归档打包
git archive用法
导出最新的版本库 git archive -o ../latest.zip HEAD
补:有次同事发我补丁,结果打不上,很奇怪,报错。然后用Android Studio自带的Apply Patch选项打上了。