基本了解
Git 是一些命令行工具的集合,可以用来跟踪、记录文件的变动,经常用于开源代码。比如你可以进行旧版本恢复、比对、分析、合并等等。这个过程被称之为 版本控制。已经有一系列的版本控制系统,比如 SVN、Mercurial、Perforce、CVS、Bitkeepe 等等。
Git 是分布式的,这意味着它并不依赖于中心服务器来保存你文件的旧版本。任何一台机器都可以有一个本地版本的控制系统,其实就是一个硬盘上的文件,我们称之为 仓库(repository)。如果是多人协作的话,你还需要一个线上仓库,用来同步代码等信息。这就是 GitHub、BitBucket 等网站做的工作。
安装 Git
在你的机器上安装 git 非常简单:
- Linux – 打开终端,然后通过包管理安装,在 Ubuntu 上命令是:sudo apt-get install git
- Windows – 推荐使用 git for windows,它包括了图形工具以及命令行模拟器。
- OS X – 最简单的方式是使用 homebrew 安装,命令行执行 brew install git
基础命令
这里仅介绍基础命令,远程仓库和分支管理等功能在下一章节。
初始化仓库
git init
添加新文件
git add filename
检查状态
git status
是另一个非常重要的命令,它反馈给我们仓库当前状态的信息:是否为最新代码,有什么更新等等。
git status
查看日志
log
log 命令可以显示所有提交过的版本信息
git log
relog
可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
例如执行 git reset --hard HEAD~1
,退回到上一个版本,用 git log
则是看不出来被删除的 commitid,用 git reflog
则可以看到被删除的 commitid,我们就可以买后悔药,恢复到被删除的那个版本。
git relog
提交代码
git commit -m "Adding files"
版本回退
- git reset --hard HEAD^ 回退到上一版本
- git reset --hard HEAD^ 回退到上上版本
- git reset --hard HEAD~100 回退到上 100 个版本
- git reset --hard 具体版本号回退到具体版本号
撤销修改
撤销修改有两种情况,文件在工作区和暂存区的撤销操作是不一样的。
撤销工作区文件修改
git checkout -- filename
撤销暂存区文件修改
已经被添加到暂存区的文件是无法通过 checkout 撤销操作的,需要通过 reset 命令撤销操作。
撤销修改回到最新的版本
git reset HEAD filename
删除文件
如果仅仅通过 rm 或者文件管理器中删除了版本库或者暂存区的文件,Git 能追踪到删除操作,但是并不会做任何操作,即你提交时,删除操作并不会提交上去。要让 Git 做出操作,需要通过 add 操作。
第二种方法就是通过 Git 的 rm 命令:
git rm filename
此命令会将删除文件的操作通知到 Git,而不需要再进行 add 操作。可以把该命令看成是集成了删除文件和 add 操作两个命令。
远程仓库
关联远程库
如果有了本地库,则需要关联远程库。
git remote add origin git@github.com:michaelliao/learngit.git
克隆远程库
克隆远程库会在本地创建并克隆该远程库。
git clone git@github.com:michaelliao/learngit.git
推送代码到远程库
把本地的提交传送到远程库的动作叫做 push。
git push
命令有两个参数,远程仓库的名字以及分支的明治。
git push origin master
git push
还有个 -u
参数,若加上此参数,则会把该远程仓库设为默认仓库,后面再做 push 操作,则不需要再指定主机。
git push -u origin master
拉取远程库代码
后面两个参数为主机名以及分支名。
git pull origin master
分支管理
查看分支
$ git branch
* dev
master
git branch
命令会列出所有分支,当前分支前面会标一个 *
号。
创建分支
创建分支
git branch dev
创建并切换到该分支
git branch -b dev
切换分支
前面已经在删除文件小节中介绍过 checkout 命令,git checkout
命令用于切换分支或恢复工作树文件。git checkout
是 Git 最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区。
git checkou master
合并分支
git merge
命令用于合并指定分支到当前分支。
git merge dev
删除分支
git branch -d dev
标签管理
通常,发布一个版本时,会在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。由于 Git 版本号是一串长长的字符串,同时查找 git message
也是一件非常繁琐的事情,通过给版本打标签可以让版本控制更加人性化。
创建标签
创建标签时若未指定版本号,若默认为当前版本。
git tag <tagname> <commitid>
创建标签时还可以带上说明
git tag -a <tagname> -m "<description>" <commitid>
查看所有标签
git tag
查看标签信息
git show <tagname>
删除标签
删除本地标签
git tag -d <tagname>
删除远程标签
git push origin :refs/tags/<tagname>
推送标签到远程库
推送一个本地标签
git push origin <tagname>
推送全部标签
git push origin --tags