git简介
引用某位大佬的话,git是目前世界上最先进的分布式版本控制系统(没有之一)。git可以自动帮你记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了。在这里记住它的特点,分布式。
1.安装git
1.1在Linux上安装git
$ sudo apt-get install git
1.2在mac上安装git
安装homebbrew,然后通过homebrew安装git,具体方法请参照brew.sh
1.3在Windows上安装git
在Windows上使用git,可以从git官网上直接下载安装教程,然后按照步骤安装。
安装完成后,需要进行全局的设置,在命令行输入:
$ git config --global user.name "your name"
$ git config --global user.email "your email"
2.本地仓库
2.1初始化本地仓库
$ mkdir yourProjectDir //创建一个本地的工程
$ cd yourProjectDir //移动到这个工程的主目录下
$ git init //初始化本地的git仓库
2.2提交到本地仓库及其常用操作
$ git add yourFileName //添加你需要提交的文件到暂存区
$ git commit -m "describe" //讲暂存区的内容提交到本地仓库
注意: 当需要提交到暂存区的文件较多时,可以使用
$ git add .
命令来追踪当前目录下的所有文件。
2.3查看当前git状态
$ git status
2.4查看某个文件的前后改动
$ git diff youFileName
2.4查看 commit 和 reset 历史日志
$ git log //查看commit版本log
$ git reflog //查看reset版本log
2.5版本回滚
$ git reset --hard HEAD^ //回滚上一个版本
$ git reset --hard HEAD^^ //回滚上一个的上一个版本
$ git reset --hard commitId //回滚到某个指定的版本(id可以只输入前几位)
$ git reset --hard HEAD~100 //回滚到之前第100个版本
2.6撤销修改
$ git checkout -- fileName //让这个文件回到最近一次git commit或git add时的状态
3.远程仓库
3.1克隆到本地
$ git clone git@github.com:michaelliao/learngit.git
3.2或者直接在本地建立与远程仓库的连接
$ git remote add origin git@github.com:michaelliao/learngit.git
3.3将本地库推送到远程仓库
$ git push -u origin master
-u参数的意义:git不仅会将本地master分支上的内容推送到远程master分支上,还会自动建立本地master分之和远程master分之的连接。
4.分支管理
4.1创建并切换分支
$ git checkout -b dev //-b参数表示创建并切换
等价于
$ git branch dev //创建分支
$ git checkout dev //切换分支
这两条命令。
4.2查看分支
$ git branch //查看所有分支以及当前所在分支
4.3切换分支
checkout切换:
$ git checkout dev //切换到dev分支
switch切换
$ git switch -c dev //创建并切换到dev分支
$ git switch dev //切换到已存在的dev分支
4.4合并分支
将dev分支合并到master分支
$ git checkout master //1.切换到master分支
$ git merge dev //2.将dev分支合并到master分支
4.5删除分支
$ git branch -d dev //删除dev分支
4.6禁用fast forward模式
合并分支时,如果可能,git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
合并dev分支,请注意–no-ff参数,表示禁用Fast forward
$ git merge --no-ff -m "merge with no-ff" dev
因为本次合并会创建一个新的commit,所以加上-m参数,把commit的描述写进去。
4.7常用的分支策略
实际开发中,我们应按照基本的分支策略进行开发
(1)master分支应该是非常稳定的,仅仅用来发布新的版本。平时不能在上面开发新的功能。——用来控制发布版本的分支
(2)dev分支是用来平时开发的分支。所有人都在dev分支上工作,有新的功能就合并到dev分支上。——用来平时开发的分支
(3)feature分支和bug分支。这两个分支是控制在本地的分支,你平时根据需要在这两个分支开发新feature和修改bug的分支,一般不需要推送到远程仓库。——在本地使用的分支
4.8暂存某个feature分支
$ git stash //将当前分支未提交的工作区的内容暂存
查看stash列表(暂存列表):
$ git satsh list //查看stash列表,内容如下:
stash@{0}: WIP on dev: f52c633 add merge
恢复暂存内容:
$ git stash apply //恢复stash内容,但是stash并没有删除
$ git stash pop //恢复stash内容并删除stash
4.9复制某个分支的某次提交到当前分支
$ git cherry-pick 4c805e2 //将4c805e2这次commit复制到当前分支并且再本分支再commit一次
5.多人协作
5.1推送分支
$ git push origin master //推送当前分支到远程master分支上(可用-u参数建立连接方便以后直接推送到该分支)
$ git push origin dev //推送当前分支到远程dev分支上(可用-u参数建立连接方便以后直接推送到该分支)
5.2 抓取分支
当你使用
$ git clone git@github...
命令克隆到你本地时,理论上你只能看见master分支(使用git branch命令查看)。
想要在本地的dev分支上开发,就必须建立远程origin的dev分支到本地,使用:
$ git checkout -b dev origin/dev
这个命令。现在你就可以在dev分支上工作并且推送本地dev分支到远程dev分支了。
5.3 指定本地dev分支与远程origin/dev分支的链接
$ git branch --set-upstream-to=origin/dev dev
6.标签
如果需要在master分支上打上版本标签,那么:
$ git switch master //1.切换到master分支
$ git tag v1.0 //2.创建一个v1.0的标签
$ git tag //查看所有标签
这种方式是将标签打在最近一次提交的commit上。
那,将标签打在之前指定的某个commit上,就是
$ git tag v0.9 f52c633 //f52c633是某次commit的id
查看某个标签的信息:
$ git show v0.9 //可以看到commit id和时间信息等
参数说明:
$ git tag -a v0.1 -m "version 0.1 released" 1094adb // -a 参数指定标签名,-m 参数指定说明文字
$ git tag -d v0.9 // -d 删除v0.9标签
$ git push origin v1.0 // 推送某个标签到远程
$ git push origin --tags //推送全部尚未推送到远程的本地标签
删除远程标签:
$ git tag -d v0.9 //1.先从本地删除
$ git push origin :refs/tags/v0.9 //2.然后,从远程删除。删除命令也是push
7.添加/删除远程
查看远程仓库:
$ git remote -v //或者直接使用git remote(-v参数可以查看详细信息)
添加远程仓库:
$ git remote add github/gitee git@git... //添加github远程仓库或者码云远程仓库
删除远程仓库:
$ git remote rm origin/github/gitee // origin、github或者gitee都是创建是远程仓库的名称然后,从远程删除。删除命令也是push
8.忽略文件
有时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件等。
git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
忽略文件的原则是:
(1)忽略操作系统自动生成的文件,比如缩略图等;
(2)忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
(3)忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
然后需要把.gitignore文件也提交推送到远程。
可以用-f强制将已忽略的文件添加到git:
$ git add -f test.txt //用-f强制将已忽略的文件添加到git
//参考廖雪峰大神文章整理~