在Android开发中,代码管理是必不可少的,即使有些时候是敏捷开发,或者是小demo也需要通过代码管理工具来进行管理,这样对于任何的修改都能够一目了然。虽然现在不管是Git还是SVN都有比较方便图形化操作界面,但是感觉还是命令行能更好的理解其管理的核心。
这里仅列出一些平时工作中用的比较多的Git命令,记录下来,避免忘记。
目录
1.Git回退命令
2.git stash的使用
3.解决提交冲突
4.检出(checkout与origin)
5.合并分支修改(cherry- pick)
6.分支记录(branch)
7.生成patch
8.打入patch
1.Git回退命令
回退到指定版本 | git reset --hard 版本序列号 |
撤回上一次的提交,保留提交前的代码 | git reset --soft HEAD~1 |
撤回上一次文件添加,保留原来修改 | git reset HEAD . |
2.git stash的使用
分支压栈(保存现有修改) | git stash |
分支出栈(还原修改信息) | git stash pop <stash id> |
显示修改内容 | git stash show <stash id> |
显示具体区别 | git stash show -p <stash id> |
清除某一条压栈记录 | git stash drop <stash id> |
清除所有的压栈修改 | git stash clear |
3.解决提交冲突
拉取最新代码 | git pull <remote branch> (显示有冲突) |
当前修改压栈 | git stash |
查看保存标记 | git stash list (stash@{0}) |
再次拉取更新 | git pull <remote branch> |
合并冲突代码,并解决冲突 | git stash pop 0(或者 stash@{0}) |
清除压栈信息 | git stash drop 0 或者 git stash clear(清除所有) |
4.检出(checkout与origin)
切换分支 | git checkout <branch name> |
拉取分支具体文件 | git checkout <branch name> <file path> |
拉取一个本地不存在的远程分支到本地 (本地自动创建并关联,自动切换过去) | git checkout -b origin/远程分支名 (如果失败,先执行一次git fetch) |
创建分支并切换到该分支 | git checkout -b <branch name> |
将本地分支push到远程分支 本地分支名:远程分支名 | git push origin debug:debug |
推送一个空分支到远程分支debug 相当于删除远程分支 | git push origin :debug |
删除远程分支debug | git push origin --delete debug |
如果远程分支不存在,上传到一个新的远程分支debug | git push --set-upstream origin debug |
5.合并分支修改(cherry- pick)
指定合入任何一条不在HEAD分支上 的一次提交记录 | git cherry-pick 版本序列号 |
继续更新查看合并情况 | git cherry-pick --continue |
取消这次更新 | git cherry-pick --abort |
整理排序多条提交记录 | git rebase -i 多条提交记录 |
6.分支记录(branch)
查看本地所有分支和最近一次提交记录 | git branch -v |
查看远程所有分支和最近一次提交记录 | git branch -r |
查看所有分支(本地和远程) | git branch -a |
7.生成patch
成最近一次commit的patch | git format-patch HEAD^ |
生成最近两次commit的patch | git format-patch HEAD^^ |
生成两个commit间的修改的patch (包含两个commit. <r1>和<r2>都是具体的commit号) | git format-patch <r1>..<r2/> |
生成单个commit的patch | git format-patch -1 <r1> |
生成某commit以来的修改patch(不包含该commit) | git format-patch <r1> |
生成从根到r1提交的所有patch | git format-patch --root <r1> |
8.打入patch
查看patch的情况 | git apply --stat 0001-limit-log-function.patch |
检查patch是否能够打上,如果没有任何输出,则说明无冲突,可以打上 | git apply --check 0001-limit-log-function.patch |
将名字为0001-limit-log-function.patch的patch打上 | git am 0001-limit-log-function.patch |
添加-s或者--signoff,还可以把自己的名字添加为signed off by信息,作用是注明打patch的人是谁,因为有时打patch的人并不是patch的作者 | git am --signoff 0001-limit-log-function.patch |
将路径~/patch-set/*.patch按先后顺序打上 | git am ~/patch-set/*.patch |
当git am失败时,用以将已经在am过程中打上的patch废弃掉(比如有三个patch,打到第三个patch时有冲突,那么这条命令就把打上的前面两条patch丢弃掉,返回没有打patch的状态) | git am --abort |
当git am失败,解决完冲突之后,这条命令会接着打patch 合入一个patch包 | git am --resolved |
(注: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的人)
这些命令都是可以配合使用的,比如: 在/app目录下 git am .patch文件 打入一个patch文件,然后git reset HEAD~1 取消patch中的提交,然后就可以进行本地编辑了。
再如:合并两条stash ,首先出栈第一条记录git stash pop 0 ,然后进行提交git add . ,git commit -m "提交信息" ,再出栈第二条记录,git stash pop 1 ,git add . ,最后撤销第一条记录的提交:git reset --soft HEAD^ , 此时两次的stash就已经合并了。
暂时想到的用得比较多的就是这些,后面也会持续更新和补充,好记性不如烂笔头。