1. 创建版本库
初始化一个Git仓库,使用 git init
命令
添加文件到Git仓库,分两步:
-
第一步,使用命令
git add <file>
,注意,可反复多次使用,添加多个文件; -
第二步,使用命令
git commit
,完成。
注意:
-
git add <file>
可以添加单个文件到暂存区;git add -A
可以添加所有改动文件到暂存区 -
git commit -m "xxx"
可以提交所有暂存区文件到分支;同样,该操作也可以使用git commit -a
命令来执行
2. 时光机穿梭
使用 git status
命令可以查看当前仓库状态
使用 git diff
命令可以仓库前后修改的内容
2.1 版本回退与回退后复位
2.1.1 版本回退
-
git log
命令显示从最近到最远的提交日志,里面包含提交说明和版本id -
git log --pretty=oneline
可以查看简化后的提交日志 -
git log --pretty=oneline --abbrev-commit
可以查看最简提交日志
那么,版本回退需要使用 git reset
命令
-
git reset --hard HEAD^
回退到上一个版本 -
git reset --hard HEAD^^
回退到上上一个版本 -
git reset --hard HEAD~100
回退到前100个版本
2.1.2 回退后复位
git reflog
命令记录你的每一次命令,以此可查看每次的版本id
版本复位依然需要使用到 git reset
命令
git reset --hard 8888888
2.2 撤销修改
2.2.1 撤销工作区修改
git checkout -- file
用于撤销工作区修改
例如: git checkout -- readme.txt
撤销readme.txt文件在工作区的修改
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout
命令
2.2.2 撤销暂存区修改
git reset HEAD file
用于撤销暂存区修改
例如: git reset HEAD readme.txt
撤销readme.txt文件在暂存区的修改,重新放回工作区
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
2.3 删除文件
删除工作区文件 test.txt
后,使用 git rm test.txt
可以继续从版本库删除该文件
删除工作区文件 test.txt
后,使用 git checkout -- test.txt
可以从版本库恢复该文件至工作区
3. 远程仓库
3.1 先本地,后远程
首先创建本地仓库,然后创建远程仓库,最后将两者关联起来
1. 远程仓库创建好后,在本地仓库下运行如下命令
git remote add origin git@github.com:michaelliao/learngit.git
2. 下一步,就可以把本地库的所有内容推送到远程库上
git push -u origin master
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改
3.2 先远程,后本地
使用克隆命令直接克隆远程库即可
git clone git@github.com:michaelliao/gitskills.git
4. 分支管理
4.1 创建与分支合并
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除已被合并的分支:git branch -d <name>
删除未被合并过的分支:git branch -D <name>
4.2 解决分支合并冲突
git log --graph
可以查看分支合并图
git log --graph --pretty=oneline
可以查看分支合并图简图
git log --graph --pretty=oneline --abbrev-commit
可以查看分支合并最简图
4.3 分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。 如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
合并时添加参数 --no-ff
可以禁用快速合并模式,由于这会产生一个提交,所有需要添加 -m
参数把commit描述写进去
实例:
git merge --no-ff -m "merge with no-ff" dev
禁用快速合并模式合并 dev 分支到当前分支
4.4 多人协作
查看远程库信息,使用 git remote
;
查看远程库详细信息,使用 git remote -v
;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
推送分支:
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
git push origin master
如果要推送其他分支,比如dev
,就改成:
git push origin dev
从本地推送分支,使用 git push origin branch-name
,如果推送失败,先用 git pull
抓取远程的新提交;
在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用 git branch --set-upstream branch-name origin/branch-name
;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
5. 标签管理
5.1 创建标签
创建标签,首先需要切换到需要打标签的分支上
查看所有tag: git tag
给最新commit即HEAD打标签: git tag <name>
给指定commit打标签: git tag <name> 888888
创建带有说明的标签,用-a
指定标签名,-m
指定说明文字: git tag -a <name> -m "version 0.1 released" 888888
查看某一标签说明: git show <name>
5.2 操作标签
删除本地标签: git tag -d <tagname>
推送指定本地标签到远程: git push origin <tagname>
推送全部尚未推送到远程的本地标签: git push origin --tags
删除远程标签:
- 先从本地删除:
git tag -d <tagname>
- 再从远程删除:
git push origin :refs/tags/<tagname>