git基本操作 git 1、版本回退 2、工作区和暂存区 3、撤销修改 4、远程仓库与本地仓库 5、分支管理 6、标签

git


 

1、版本回退

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

 

2、工作区和暂存区

工作区(Working Directory):就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区 
版本库(Repository):工作区有一个隐藏目录“.git”,这个不算工作区,而是Git的版本库。 
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD 
第一步是用“git add”把文件添加进去,实际上就是把文件修改添加到暂存区; 
第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,commit就是往master分支上提交更改。

可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

 

3、撤销修改

命令:git checkout --file 
git checkout --readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态 
命令 git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区: 
命令git rm用于删除一个文件

 
  1. $ git rm test.txt

恢复误删:

 
  1. $ git checkout -- test.txt
 

4、远程仓库与本地仓库

在本地安装git,并注册github账户,然后创建SSH Key,将pub下的可以添加到github页面中。

 
  1. $ ssh-keygen -t rsa -C "youremail@example.com"

然后在github中新建一个仓库,可以将新建的这个远程仓库添加到本地库中,实现关联,实现如下:

 
  1. $ git remote add origin git@github.com:username/createNew.git

然后就可以将本地库的内容推送到这个远程库中,推送代码:

 
  1. #第一次加了参数-u,以后可以省略
  2. $ git push -u origin master

如果要推送其他分支,比如dev,就改成: 
$ git push origin dev 
从远程库克隆 
把远程库克隆到本地: 指向远程库地址即可

 
  1. $ git clone git@github.com:michaelliao/gitskills.git
 

5、分支管理

查看分支:git branch

创建分支:git branch name

切换分支:git checkout name

创建+切换分支:git checkout -b name

合并某分支到当前分支:git merge name

删除分支:git branch -d name 
bug分支 
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; 
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

查看远程库信息,使用git remote -v; 
本地新建的分支如果不推送到远程,对其他人就是不可见的; 
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交; 
在本地创建和远程分支对应的分支,使用

 
  1. git checkout -b branch-name origin/branch-name

本地和远程分支的名称最好一致; 
建立本地分支和远程分支的关联,使用

 
  1. git branch --set-upstream branch-name origin/branch-name

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

 

6、标签

命令git tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id;

-a tagname -m "blablabla..."可以指定标签信息;

-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可以删除一个远程标签。