什么是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 [
提交索引文件到仓库
-m参数是本次修改的描述
git commit -m "add a test.txt file"
关联远程仓库
git remote add origin [email protected]: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^ --
命令则可以查看最近一次提交和最近一次提交的上上个版本的区别(版本E和版本C的差别)
git diff HEAD^^ --
查看版本E和版本A的差别
git diff HEAD~4 --
查看版本历史记录
git loggit log --pretty=oneline
版本回退
回退到上一个版本
git reset --hard HEAD^git reset --hard [commit id]
HEAD指向的版本就是当前版本
查看git历史命令
git reflog
撤销工作区的修改
git reset HEAD
下面的命令还可以撤销工作区中删除的文件
git checkout --
从版本库中删除文件
git rm
工作区和暂存区
工作区
工作区就是在电脑里所看到的目录。
版本库
工作区中的.git目录不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
创建和合并分支
创建+切换分支 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 devgit 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
删除标签
$ git tag -d v0.1
推送标签到远程
$ git push origin
一次性推送全部尚未推送到远程的本地标签
$ git push origin --tags
删除远程标签
先从本地删除$ git tag -d v0.9Deleted tag 'v0.9' (was f52c633)然后从远程删除$ git push origin :refs/tags/v0.9To github.com:michaelliao/learngit.git - [deleted] v0.9
Referer
来自ckj123师傅的git命令速查表。
Git教程 - 廖雪峰的官方网站
Git教程