Git是目前世界上最先进的分布式版本控制系统,这里有两个名词:分布式、版本控制。
墙裂推荐 廖雪峰的 Git 教程。这篇文章也算是看了 廖老师的教程后写的一点笔记。
版本控制:顾名思义,就是通过各个版本的内容来对文件进行管理,可以通过查看各个版本可以知道修改人和修改时间。
之前也一直在使用 Git ,但是使用的基本都是备份的功能,使用的也是一些个人开发(非团队协作)常见的命令,如:
git init
git add .
git commit -m "xxx"
git push
git pull
git status
git checkout -b dev
git diff
当然如果只是个人使用,知道以上命令就可以使用好 Git 了。
在大型项目中肯定会有多人协作的情况,所以我们需要了解 Git 在多人协作时的一些操作。
在多人协作中经常遇到的问题就是多个人修改同一个文件的冲突,解决办法就是先处理冲突,看是要保留我们的修改还是保留其他人的修改,或者是合并二者的修改。
在开发中常见的场景还有:
- 修复 Bug
- 添加新功能
- 打 Tag
- 版本回退
- 撤销修改
- 删除文件
在开始介绍以上几个功能的命令之前先了解一下 Git 中 工作区和暂缓区 的概念。
暂缓区:git add <file>
这个命令是将文件添加到 暂缓区,git commit -m "xxx"
这是将暂缓区的内容提交到分支。
工作区:就是我们在实时编辑的文件,在 git commit -m "xxx"
之后没做任何修改,那么工作区就是干净的。
修复 Bug
在开发中经常还在写代码,突然测试跟你说有 Bug 了需要紧急修改,那么这时候需要用上 Git 的 修复 Bug 的版本控制了。
- 保存当前的修改。
git stash
- 首先确定出现 Bug 的分支,从那个分支创建出一个修复 Bug 的分支。
切换分子:git checkout 分支名,创建 Bug 分支:git checkout -b issue-101
- 在 Bug 分支上修复问题,合并分支,删除 Bug 分支。
修复问题并提交:git add <file> , git commit -m "xxx", 切回到出 Bug 的分支:git checkout 分支名,合并分支:git merge --no-ff -m "merged bug fix 101" issue-101
- 回到保存代码的分支上继续撸码。
git checkout 保存代码的分支,查看保存的列表:git stash list,取出保存的代码:git stash pop, 取出某个保存的代码:git stash apply stash@{id}
添加新功能
和修复 Bug 分支操作类似
- 保存当前的修改
- 找到要添加新功能的分支版本,创建出一个 feature 分支。
- 完成新功能,合并分支,删除分支。
如果在合并之前想放弃新功能可以使用:git branch -D feature-vulcan 强行删除分支
- 回到保存代码的分支上继续撸码。
打 Tag
tag
就是一个让人容易记住的有意义的名字,它跟某个commit
绑在一起。例如版本发布时需要指定某个时刻提交的版本进行打包,需要根据commit id
去查找,一大串的英文数字中找到一串commit id
看着不是很爽,所以我们在commit
的时候加上tag
名字后,需要打包某一个时刻提交的版本,直接搜索tag
名称即可找到commit id
,最后通过commit id
打包。
- 命令
git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id
; - 命令
git tag -a <tagname> -m "blablabla..."
可以指定标签信息; - 命令
git tag
可以查看所有标签。 - 命令
git show <tagname>
可以看到说明文字
版本回退
顾名思义就是撤销修改的意思,就像吃了后悔药的那种效果。前提是没有提交到远程仓库
- 回退上一个版本。
git reset --hard HEAD^
- 回退上上一个版本。
git reset --hard HEAD^^
- 回退到某个版本。
git reset --hard <填写 commitId 前几位即可>
回退到某个版本需要 commit id
,可以通过 git log
命令查看具体的commit id
,如果嫌弃git log
打印的内容太杂,可以使用 git log --pretty=oneline
查看 commit id
如果已经回退后的版本又想恢复,但是找不到commit id
,可以通过git reflog
来查找commit id
,它的作用是用来记录你的每一次命令。
撤销修改
如果还未添加到暂缓区,也就是所做的修改还没有做git add
操作
可以使用命令git checkout -- file
可以丢弃工作区的修改。
如果已经添加到暂缓区但是还没提交,也就是做了git add
但是还没做git commit -m "xxx"
,可以使用命令git reset HEAD <file>
将暂存区的修改撤销掉(unstage),重新放回工作区
删除文件
包含真的要删除文件以及误删文件。
真的要删除文件
git rm <file>
git commit -m "remove file"
误删文件,想要恢复(和撤销修改类似)
git checkout -- file