Git 学习

git了解的一塌糊涂,这里重新系统的学习一下。

什么是git

Git是一款免费、开源的分布式版本控制系统。
Git是目前世界上最先进的分布式版本控制系统(没有之一)。

分布式和集中式

分布式是每个人电脑上都有完整版本,没有网络也可以工作,可以同事之间交换修改部分,也可以统一设立中央服务器,然后得到每个人修改的记录。

集中式就是将整个文件统一放在特定服务器上,工作的时候先要从这个服务器上获取到最新版本,然后再进行自己的编辑修改,完了再提交到此服务器上。所以如果没有网络,就没法工作了。

Git是分布式版本控制系统,就是将同一个Git仓库,分布到不同的电脑上。这样工作时就必须找一台电脑充当服务器仓库的角色,每天24小时开机,其他每个人都从这个服务器仓库中拉取别人的提交,并且各自把各自的提交推送到这个服务器仓库里。

git基础操作

创建版本库

版本库又名仓库,英文名repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以”还原”。

新建GitTest目录,在该目录下创建版本库。

git init

此时会在当前目录下生成一个.git目录,这个目录是Git来跟踪管理版本库的。

提交文件到索引库

“索引”保存工作树内容的快照,并且将该快照作为下一个提交的内容。 因此,在对工作树进行任何更改之后,并且在运行git commit命令之前,必须使用git add命令将任何新的或修改的文件添加到索引。

新建test.txt文件,写入Smi1e!!!\naaabbb
提交test.txt文件到索引库

git add test.txt

查看目录中所有修改过或已删件但没有提交的文件

git add -i [<path>]

提交索引文件到仓库

-m参数是本次修改的描述

git commit -m "add a test.txt file"

关联远程仓库

git remote add origin git@github.com:Github用户名/GitTest.git

把本地库的所有内容推送到远程库上

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令,不加任何参数使用git push

git push -u origin master 

显示工作目录和暂存区的状态

git status命令可以列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit)的文件

git status

git diff 文件对比

假设仓库里已提交的有五个版本,依次提交的是A、B、C、D、E 。
不加参数即默认比较工作区与暂存区

git diff

查看最近两次提交版本的区别(版本E和版本D的差别)

git diff HEAD^ -- <filename> 

命令则可以查看最近一次提交和最近一次提交的上上个版本的区别(版本E和版本C的差别)

git diff HEAD^^ -- <filename>

查看版本E和版本A的差别

git diff HEAD~4 -- <filename> 

查看版本历史记录

git log

git log --pretty=oneline

版本回退

回退到上一个版本

git reset --hard HEAD^

git reset --hard [commit id]

HEAD指向的版本就是当前版本

查看git历史命令

git reflog

撤销工作区的修改

git reset HEAD <filename>

下面的命令还可以撤销工作区中删除的文件

git checkout -- <filename>

从版本库中删除文件

git rm <filename>

工作区和暂存区

工作区

工作区就是在电脑里所看到的目录。

版本库

工作区中的.git目录不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
图片.png
图片.png

创建和合并分支

创建+切换分支 dev

$ git checkout -b dev

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev

创建分支

$ git branch dev

切换分支

$ git checkout master

查看当前分支
git branch命令会列出所有分支,当前分支前面会标一个*号。

$ git branch
* dev
  master

合并分支
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git merge命令用于合并指定分支到当前分支。

git merge dev
git merge --no-ff -m "merge with no-ff" dev

删除分支

$ git branch -d dev

保存未提交的修改

git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
查看已储存的文件

git stash list

恢复已储存的文件

git stash apply

恢复已储存的文件并删除stash中的内容

git stash pop

标签管理

创建标签
默认标签是打在最新提交的commit上的

$ git tag v1.0

对指定commit id打标签

$ git tag v0.9 [commit id]

查看所有标签

$ git tag

查看标签信息

git show <tagname>

删除标签

$ git tag -d v0.1

推送标签到远程

$ git push origin <tagname>

一次性推送全部尚未推送到远程的本地标签

$ git push origin --tags

删除远程标签

先从本地删除
$ git tag -d v0.9
Deleted tag 'v0.9' (was f52c633)

然后从远程删除
$ git push origin :refs/tags/v0.9
To github.com:michaelliao/learngit.git
 - [deleted]         v0.9

Referer

来自ckj123师傅的git命令速查表。
图片.png
Git教程 – 廖雪峰的官方网站
Git教程

发表评论

电子邮件地址不会被公开。 必填项已用*标注