自己没事,把git常用命令做个记录总结。方便自己和初学者查看,本文针对初学者,如果你已经是工作多年高手,请跳过。
git的几个区认识,分别为工作区,缓存区,版本库。
工作区:包含.git文件夹的目录就是工作区,也称为工作目录,主要用于存放开发的代码
暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方
版本库:前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
git基础命令
下面是一些基础常用命令,工程项目经常用到的。
git branch /*查看当前分支是什么*/
git branch -a /*查看所有分支是什么*/
git status /*查看当前哪些文件有变动*/
git log /*查看提交log,替别留意commit id*/
git log --online /*简介显示,只显示commit msg*/
git log --online -3 /*简介显示,只显示3行commit msg*/
git blame /*查看代码提交作者,甩锅时候必用*/
git show 28fc7d21eee632bd5e9ded1ca2eb861af7e45db7 --stat /*根据commit id 查看具体提交文件和内容*/
git reset --hard HEAD~1 /×删除本地库的最后一次提交×/
/*HEAD文件指向的branch就是当前branch.*/
git reset HEAD . /* 恢复到当前分支的最后一次提交记录,通俗讲,就是和最初clone的分支代码一致*/
git checkout 分支名 /* 用于切换分支*/
git checkout -b 分支名 /*用于创建分支并切换*/
git checkout . /*会取消所有本地的修改(相对于暂存区)。相当于用暂存区的所有文件直接覆盖本地文件!*/
git checkout HEAD . /*会取消所有本地的修改(相对于暂存区)。相当于用暂存区的所有文件直接覆盖本地文件*/
git checkout package/libbus_box-2014-03-18/CMakeLists.txt /*恢复文件, 从*/
git diff /*查看所有文件修改内容*/
git diff package/kebi2009/src/Server.c /*查看某一个修改文件内容*/
git lfs ls-file /*显示当前被 lfs 追踪的文件列表*/
git一次提交流程
下面是一次完整的代码修改提交流程,需要对初学者有所帮助。
/*用户kobe2009,克隆alg代码,分支为master*/
git clone ssh://kobe2009@git.axin.com:29418/axinwifi/alg
/*创建V2100-1806分支,并且切换到V2100-1806*/
git checkout -b V2100-1806 origin/V2100-1806
/*切换到master*/
git checkout master
/*添加要提交文件*/
git add xxx.xxx.xxx
/*添加要删除文件*/
git rm xx.xx.xx.xx
/*提交修改,这个时候会产生一个commit id,并且要写提交msg*/
git commit -s
/*pull远端V4-2.26.10代码到本地*/
git pull --rebase origin V4-2.26.10
/*提交本地修改到远端V4-2.26.10*/
git push origin HEAD:refs/for/V4-2.26.10
走完上面的流程,其实还没有正在的提交到代码仓库,这时候会有一个review流程,如果review通过,进行merge,这样就真的吧代码提交完成了。不过这里可能有冲突,需要手动处理了。
发现还需要修改继续提交
/*这个命令使用是在同一个提交,不改变commit id情况下,修改代码。其实就是上一次提交reveiw,需要修改使用下面命令。*/
git commit --amend
/*同步一下代码*/
git pull --rebase origin V4-2.26.10
/*提交代码*/
git push origin HEAD:refs/for/V4-2.26.10
git cherry-pick方法
/*代码切换到主分支*/
git checkout master
/*把commit id 2715bf182d89f0bef7af5f8d4d7dc40a1e0a02a7,cherry-pick 到master分支 */
git cherry-pick 2715bf182d89f0bef7af5f8d4d7dc40a1e0a02a7
/*查看同步过来的修改文件*/
git status
/*假设修改的是dhcpxx.conf*/
vi package/dhcpxx.conf
/*添加文件,准备提交*/
git add package/dhcpxx.conf
如果这时候报冲突,手动修改冲突。------->有机会把冲突的错误列一下,更容易理解。
中间如果发现冲突,解决冲突,然后继续提交。
git cherry-pick --continue
git pull --rebase origin master
git push origin HEAD:refs/for/master
git commit --amend
git push origin HEAD:refs/for/master
git相关工具
gitk 这个工具需要单独安装,查看提交内容和版本分支变化。
repo 还没理解透,因为我用的少
svn常用命令
很多年前,使用svn管理过一段时间代码,因此积累一些svn 常用命令。
#svn的使用
#svn ls http://192.168.1.199/uhfgww --usename
--kobe2009 --password --kobe2009
#显示当前文件夹内的所有文件。
#svn
status
#svn
--version
#svn
info 显示svn相关的信息
#svn commit -F
SvnText.txt --username kobe2009
--password kobe2009
#提交文件,并且附上相关的文件说明。
#svn
update 更新文件
#svn checkout http://192.168.1.199/uhfgww/trunk/
-username kobe2009 –password kobe2009 下载truck下的文件。
#svn
add xxx.txt添加新的文件
#
问题及困惑
- gerrit和gitlib代码管理区别是什么
- svn和git的各自优势是什么
注意事项
gerrit github gitlib几个概念不要混淆,是不一样的东西。
上面可能有写的不准确地方,请指正,再修改。