git常用命令

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。

git安装

windows安装

下载msysgit/git,安装’Git Bash here’和’Git GUI here’,使用Git Bash即可

linux安装

sudo apt-get install git (ubuntu)
yum install git (centOS)

安装完成的时候进入git命令行配置自己名称和邮箱:

git config --global user.name "xiaoyu"
git config --global user.email "zxy9312@gmail.com"

本地仓库操作

创建一个版本库

mkdir learngit
cd learngit
pwd

初始化一个Git仓库,使用git init命令:

git init

创建一个readme.txt文件,使用命令添加一个文件到git仓库

git add 是将工作区的内容添加到缓存区
git commit 是将缓存区的内容提交上去
git diff 是查看工作区和缓存区的内容的区别

git add readme.txt
git add file1.txt file2.txt
git add *
git commit -m "wrote a readme file!"

查看工作区状态

git status

查看修改的内容(比较缓存区和工作区之间的区别)

git diff

查看最近到最远提交的日志文件

git log
git log --pretty=oneline   //这儿看到的是commit id

记录你的每一次命令,查看head

git reflog  //查询每次提交的commit信息,从而重回未来

回滚到上一个版本

git reset --hard HEAD^  //向上回滚一个版本
git reset --hard HEAD^^  //向上回滚两个版本
git reset --hard HEAD~100  //向上回滚100个版本

查看readme.txt 文件

cat readme.txt

工作区修改全部撤销

可以在你还没有将文件添加缓存区之前,即没有git add之前

git checkout -- readme.txt  // --很重要,没有表示切换到另一个分支

两种情况可以被修改:

  1. 自然修改还没有放置到缓存区,现在撤销回到版本库一模一样的状态
  2. 已经添加到缓存区,做了修改,现在回到添加到缓存区后的状态

把缓存区的修改回退到工作区

使用了git add,但没有git commit

git reset HEAD readme.txt  //撤销缓存区修改
git checkout -- readme.txt //撤销工作区修改

如果使用git commit的话,就是用版本回滚,前提是你没有提交的远程库,
不然的话这条记录无法销毁

删除一个文件

git rm test.log
git commit -m "delete test.log"

#远程库操作

设置远程秘钥

  1. 查看是否已经有了ssh密钥:cd ~/.ssh
    设置远程仓库: ssh-keygen -t rsa -C "zxy9312@gmail.com"
    一路回车,生成id_rsa和id_rsa.pub两个文件
  2. 登陆GitHub,打开’setting’ -> ‘SSH Keys’,粘贴id_rsa.pub的内容

推送到github上

git remote add origin git@github.com:RoinZhang/learngit.git
git push -u origin master 第一次推送到master分支的所有内容
git push origin master 推送最新的修改

远程分支比本地更新,需要首先git pull

git pull origin master

从git上面克隆

git clone git@github.com:RoinZhang/learngit.git

查看远程库信息

git remote
git remote -v

分支管理

git checkout -b dev  //创建并切换到dev分支

git branch  //查看所有分支
git branch dev  //创建dev分支
git checkout dev  //切换到dev分支
git merge dev //使用[fast forword]合并dev分支到当前分支上
git branch -d dev  //删除dev分支

普通分支合并

git merge --no--ff -m "merge with no-ff" dev  
// 使用普通模式合并dev到当前分支上,并提交一个新版本  
// --no--ff 表示普通模式合并  
// -m "merge with no-ff" 表示commit一个新版本  

【注意】:

合并分支时,加上--no-ff参数就可以用普通模式合并,
合并后的历史有分支,能看出来曾经做过合并,
而fast forward合并就看不出来曾经做过合并。

查看分支合并图

git log --graph --pretty=oneline --abbrev-commit

BUG分支

git stash  //在当前分支上把当前工作现场'储藏起来',等以后恢复现场
git stash list  //查看储藏的工作现场
git stash apply //恢复stash内容并不删除工作现场
git stash drop  //删除statsh内容
git stash pop   //恢复工作现场并删除stash内容
git stash stash@{0}  //恢复指定的stash

Feature分支

git branch -D dev  //强行删除没有被合并过的dev分支

标签管理

git tag <name>  #用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."  #可以指定标签信息;
git tag -s <tagname> -m "blablabla..."  #可以用PGP签名标签;
git tag #可以查看所有标签

git push origin <tagname>  #可以推送一个本地标签;
git push origin --tags  #可以推送全部未推送过的本地标签
git tag -d <tagname>  #可以删除一个本地标签;
git push origin :refs/tags/<tagname>  #可以删除一个远程标签。