Git的使用(命令篇)

整理一些常用的Git命令及使用Git命令时遇到的问题。

1.git config

a.查看用户名和邮箱
git config user.name
git config user.email

b.修改用户名和邮箱

全局修改:
git config --global user.name "xxx"
git config --global user.email "xxx"

针对某个项目修改:
cd 项目对应的的本地仓库路径
git config user.name "xxx"
git config user.email "xxx"

注:用户名和邮箱地址是本地Git客户端的一个变量,当你安装Git后首先要做的事情就是设置你的用户名和邮箱地址 ,因为每次Git提交都会使用这个用户名和邮箱地址来记录提交信息。所以这个用户名和邮箱地址只是用来记录本地Git提交信息的一个标识,和你远程仓库账号下的用户名或邮箱地址没有任何关系。

2.git clone

git clone 远程仓库地址   #克隆master分支
git clone -b 分支名 远程仓库地址   #克隆指定的某个分支

3.git branch

git branch -a   #查看所有分支
git branch -r   #查看所有远程分支
git branch -l   #查看所有本地分支

4.切换分支

git checkout 分支名

5.在某分支上创建新分支并切换到新分支

git checkout 某分支名
git branch 新的分支名
git checkout 新的分支名

等同于:

git checkout 某分支名
git checkout -b 新的分支名

6.查看仓库的状态

git status

7.查看仓库中某文件的变化

git diff 文件名

8.git commit 时的报错及解决方法

error: insufficient permission for adding an object to repository database .git/objects
error: insufficient permission for adding an object to repository database .git/objects
error: Error building trees

大概的意思是本机对git代码仓库的写权限出了问题,什么?没权限?昨天还好好的呢。。。心里顿时万马奔腾啊。。。网上google了一大堆,答案大体上分两种:

第一种:sudo chown -R git:git git库

第二种:sudo chmod 777 -R .git/objects 然后 sudo chown git.git .git/objects

看样子是需要加权限,试了两把也没搞定,怎么办?这时突然想起了另一种获取本机超级用户权限的方法:

sudo -s

接着便commit success了!想想也是,不就是权限不够么,直接变成super vip就可以为所欲为了 git push 也会有这样的报错,同理。对了,完事之后记得退出超级权限,不然在pod install时可能会出现在该权限下无法执行pod命令的情况,退出命令是 exit。

9.git pull

10.git merge

11.git push

12.标签(tag)

可以针对某一时间点的版本做标记,常用于版本发布。

git tag v1.0.0-light #创建轻量标签,是指向提交对象的引用
git tag -a v1.0.0 -m "1.0.0版本" #创建附注标签,是仓库中的一个独立对象,一般推荐这种
git tag -a v1.0.0 3fbc3e9 #给指定的commit打标签,打标签没必要在head之上,也可在之前的版本上打,这需要你知道某个提交对象的提交信息(可通过git log获取) 

git tag #查看当前分支下的所有标签
git tag -l 'v1.0.*' #查看符合模式的标签

git show v1.0.0 #查看标签的相关信息

git checkout tag名 #切换标签,与切换分支命令相同

git tag -d v1.0.0 #删除标签

通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作:
git push origin v1.0.0 #将某个标签提交到git服务器
git push origin --tags #将本地所有标签一次性提交到git服务器

如果想看之前某个标签状态下的文件,可以这样操作:
git tag #查看当前分支下的所有标签
git checkout v1.0.0 #此时会指向打v1.0.0标签时的代码状态,但现在处于一个空的分支上
cat 文件名 #查看某个文件

13.git stash(储藏)

日常开发过程中,常见这么一种情况,正在dev分支上进行常规任务的开发,但被临时告知要修复master分支上的一个代号为111的紧急bug,由于任务尚未完成,所以dev分支上的代码不方便直接提交,这怎么办呢?解决办法如下:

1.将当前的开发任务暂时储藏起来
  git stash

2.切换到master分支,再在master分支上新建一个分支并切换到新分支,准备修复bug
  git checkout master
  git checkout -b bug-111

3.修复完bug后,提交代码并合并至master并删除新分支
  git add .
  git commit -m "fix bug 111"
  git checkout master
  git merge --no-ff -m "merged fix bug 111" bug-111
  git branch -d bug-111

4.切换回dev分支,恢复之前未完成的代码
  git checkout dev 
  git stash list
  方法一:
  git stash apply(恢复stash内容)
  git stash drop(删除stash内容)
  方法二:
  git stash pop(恢复并删除stash内容)

5.如果有多次stash,也可恢复指定的stash
  git stash list
  git stash pop stash@{序号}

14.撤销某个分支上的改动

1.如果只是在工作区作了改动,可以直接进行撤销
git checkout -- 文件名

2.如果改动已经被添加到了暂存区,就要先撤销暂存区的改动,回到工作区,然后再撤销工作区的改动
git reset HEAD 文件名
git checkout -- 文件名

3.如果改动已经被添加到了暂存区并且又作了改动,那就一步一步来咯
git checkout -- 文件名
git reset HEAD 文件名
git checkout -- 文件名

4.撤销本地所有的改动
git checkout .   #让本地所有改动过的且没有提交的,都回到原来的状态
git stash   #把所有没有提交的改动暂存到stash里面,可用git stash pop恢复
git reset --hard 某次提交的编号   #返回到某个节点,不保留改动
git reset --soft 某次提交的编号   #返回到某个节点,保留改动(试了然而并没找到保留的改动啊)

15.创建本地分支来追踪某个远程分支

git checkout --track origin/某个远程分支   #创建的分支与远程分支同名

欲知更多请点击这里