> 文章列表 > git 常用命令及遇到问题

git 常用命令及遇到问题

git 常用命令及遇到问题

        自己没事,把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 --continuegit 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几个概念不要混淆,是不一样的东西。

        上面可能有写的不准确地方,请指正,再修改。