git了解的一塌糊涂,这里重新系统的学习一下。 [toc]
什么是git
Git是一款免费、开源的分布式版本控制系统。 Git是目前世界上最先进的分布式版本控制系统(没有之一)。
分布式和集中式
分布式是每个人电脑上都有完整版本,没有网络也可以工作,可以同事之间交换修改部分,也可以统一设立中央服务器,然后得到每个人修改的记录。 集中式就是将整个文件统一放在特定服务器上,工作的时候先要从这个服务器上获取到最新版本,然后再进行自己的编辑修改,完了再提交到此服务器上。所以如果没有网络,就没法工作了。 Git是分布式版本控制系统,就是将同一个Git仓库,分布到不同的电脑上。这样工作时就必须找一台电脑充当服务器仓库的角色,每天24小时开机,其他每个人都从这个服务器仓库中拉取别人的提交,并且各自把各自的提交推送到这个服务器仓库里。
git基础操作
创建版本库
版本库又名仓库,英文名repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以”还原”。 新建GitTest目录,在该目录下创建版本库。
1 | git init |
此时会在当前目录下生成一个.git
目录,这个目录是Git来跟踪管理版本库的。
提交文件到索引库
“索引”保存工作树内容的快照,并且将该快照作为下一个提交的内容。 因此,在对工作树进行任何更改之后,并且在运行git commit
命令之前,必须使用git add
命令将任何新的或修改的文件添加到索引。 新建test.txt文件,写入Smi1e!!!\naaabbb
。 提交test.txt文件到索引库
1 | git add test.txt |
查看目录中所有修改过或已删件但没有提交的文件
1 | git add -i [<path>] |
提交索引文件到仓库
-m参数是本次修改的描述
1 | git commit -m "add a test.txt file" |
关联远程仓库
1 | git remote add origin git@github.com:Github用户名/GitTest.git |
把本地库的所有内容推送到远程库上
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令,不加任何参数使用git push
。
1 | git push -u origin master |
显示工作目录和暂存区的状态
git status
命令可以列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit
)的文件
1 | git status |
git diff 文件对比
假设仓库里已提交的有五个版本,依次提交的是A、B、C、D、E 。 不加参数即默认比较工作区与暂存区
1 | git diff |
查看最近两次提交版本的区别(版本E和版本D的差别)
1 | git diff HEAD^ -- <filename> |
命令则可以查看最近一次提交和最近一次提交的上上个版本的区别(版本E和版本C的差别)
1 | git diff HEAD^^ -- <filename> |
查看版本E和版本A的差别
1 | git diff HEAD~4 -- <filename> |
查看版本历史记录
1 | git log |
版本回退
回退到上一个版本
1 | git reset --hard HEAD^ |
HEAD
指向的版本就是当前版本
查看git历史命令
1 | git reflog |
撤销工作区的修改
1 | git reset HEAD <filename> |
下面的命令还可以撤销工作区中删除的文件
1 | git checkout -- <filename> |
从版本库中删除文件
1 | git rm <filename> |
工作区和暂存区
工作区
工作区就是在电脑里所看到的目录。
版本库
工作区中的.git
目录不算工作区,而是Git的版本库。 Git的版本库里存了很多东西,其中最重要的就是称为stage
(或者叫index
)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
创建和合并分支
创建+切换分支 dev
1 | $ git checkout -b dev |
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
1 | $ git branch dev |
创建分支
1 | $ git branch dev |
切换分支
1 | $ git checkout master |
查看当前分支 git branch命令会列出所有分支,当前分支前面会标一个*号。
1 | $ git branch |
合并分支 合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 git merge
命令用于合并指定分支到当前分支。
1 | git merge dev |
删除分支
1 | $ git branch -d dev |
保存未提交的修改
git stash
会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。 查看已储存的文件
1 | git stash list |
恢复已储存的文件
1 | git stash apply |
恢复已储存的文件并删除stash中的内容
1 | git stash pop |
标签管理
创建标签 默认标签是打在最新提交的commit上的
1 | $ git tag v1.0 |
对指定commit id
打标签
1 | $ git tag v0.9 [commit id] |
查看所有标签
1 | $ git tag |
查看标签信息
1 | git show <tagname> |
删除标签
1 | $ git tag -d v0.1 |
推送标签到远程
1 | $ git push origin <tagname> |
一次性推送全部尚未推送到远程的本地标签
1 | $ git push origin --tags |
删除远程标签
1 | 先从本地删除 |
Referer
来自ckj123师傅的git命令速查表。 Git教程 - 廖雪峰的官方网站 Git教程