全栈工程师成长记

编程重新定义人生

常用 git 命令(v20161001)

我觉得所有的命令行的参数说明虽然足够简洁高效,但是总有一种看字典的即视感,所以这里我总结一些自己常用的 git 命令,通过加入一些案例展示和描述,让新手阅读起来比较像是看“范文”的样子,进而可以通过案例举一反三。文中部分内容源自 xdite 老师的 Rails101

What is git?

git 是 Linux 之父 Linus Torvalds 开发出来的一套代码版本控制系统。你可以把 git 想像成游戏时存档的工具,每当程式开发到一定的段落,就使用 git 存档一下。

git config

就像是首次玩游戏一样,你必须设定游戏玩家角色叫什么。在安装完 git 之后我们必须设定两个参数:
git config --global user.name "Jone Doe"
git config --global user.email johndoe@example.com
这样以后进行存档时,就会纪录你是这次进度的存档者。

git init

默认情况下 git 不会对我们的项目进行版本控制,所以每次新建一个项目之后,需要使用 git init 这个命令,来告诉 git 对我们的项目进行追踪,但是这个命令只要使用一次就可以了,之后在这个项目里,你只要 git add 添加变动 和 git commit 保存变动即可。
注意:千万不要在系统根目录下使用 git init,否则你整个电脑的所有文件都会被记录!

git status

git status 会告诉你 git 追踪到的所有新增、修改、删除的文件。
比如我们修改了 gemfile 和 README.md 两个文件,
然后我们输入 git add README.md,再输入 git status
你会发现 README.md 变成绿色,gemfile 档案还是红色。
这表示我们已经将 README.md “设定为预备储存进度的文件”。

git add

git add foo.txt 把名为 foo.txt 的文件加进追踪修订。
git add . ("git add dot") 把当前项目文件夹里(即 .)所有新文件和改过的文件加进追踪修订,但“保留”你删掉的文件。
git add -A 全部加进追踪修订,包括删掉的文件。“把删掉的文件加进来”听起来很奇怪,但如果你把版本控制系统想像成是追踪“修改”的工具,或许就会懂了。多数人用 git add . ,但 git add -A 会比较安全。

git commit

git commit 告诉 git 真的要执行你叫它做的事。
分成 add 和 commit 两个步骤的好处是,如此你就可以把多个修改合并在一起。
git commit 的用法是 git commit -m “描述” ,记得要加 -m 这个参数,后面的 ”描述” 里,是指你这一次commit 到底做了哪些修改,至少你不能每次都用 Added all the things ,不然以后你查看记录的时候每一次都是 Added all the things,就会不知道自己做了什么。

前方乱入:git reset --hard HEAD~ 快速回到上一次 commit 状态。

git push

把你本地有经过 git commit 过的代码推送到远端 github 或是 heroku之类的储存库上面去。
git push --all origin 接将所有分支全 push 到 github 上。
git push origin master 将本地的 master 分支 push 到 github 上。

git pull

在多人合作开发的项目中需要经常将其他人 push 到 github 上面的代码 “拉” 到本地,这样才能同步变动。
git pull origin develop 将 github 的 develop 分支 pull 到本地的当前分支。

git clone

git clone 的作用是将 github 上面的项目(别人的或自己的)克隆到本地。
注意,不要在一个已经 git init 过的目录下进行 git clone。

git clone https://github.com/twbs/bootstrap.git 将 github 上 twbs 这个用户的 bootstrap 项目代码克隆到你的电脑上(这会建立一个名为 bootstrap 的文件夹)。
git clone https://github.com/twbs/bootstrap.git my_bootstrap 和上个命令一样,但是这里会创建一个名为 my_bootstrap 的文件夹用于存放代码。
git clone https://github.com/twbs/bootstrap.git -b v3-dev 这是只将 v3-dev 这个分支 clone 下来。

git branch

git 除了可以保存项目进度,还可以通过分支(branch)来管理不同的开发状态,比如 master 分支是主分支,用于发布正式版本,一般不直接在这上面进行修改; develop 分支则是开发用的;还可以在 develop 的基础上延伸每一功能模块分支,当修改好了之后再 merge 到 develop 分支。

git branch 查看项目有多少个分支,且当前处于哪个分支。
git branch fixbug 以当前分支为副本,建立一个名为 fixbug 的分支。
git branch -D fixbug 删除名为 fixbug 的分支(当前分支必须是 fixbug 之外的其他分支才能删除)。

git checkout

git checkout . 放弃所有文件的修改(只对已经被 git 追踪过的文件有效),当你的文件被改烂了而又不想保存变更的时候,这个命令可以让项目的状态回到上一次 commit 的状态,当然也可以用 git checkout 文件名 只放弃某个被改烂的文件。
git checkout fixbug 从当前分支切换到 fixbug 分支。
git checkout -b fixbug02 以当前分支为副本建立一个 fixbug02 分支,并直接切换到新建的分支( 用 git branch 新建分支不会切换到新分支 )。

git stash

git stash 将所有修改缓存起来(而不是保存),这样你就可以 checkout 到其他分支而不需 commit 。
git stash apply 将 git stash 缓存的文件重新调出来。

git merge

git merge develop 假设当前在 master 分支下,这个命令的意思是将 develop 分支里的内容合并到 master 分支。

git log

git log 查看过去的 commit 记录,包含了 commit 的 SHA1值( commit id )、修改人信息、修改时间、备注信息等。在显示 log 的状态下,按 Q 键退出查看。

git diff

git diff 用于查看“代码”的增删改,它与 git status 不同(查看“文件”的增删改),在 commit 之前,通过 git diff 查看代码的具体变动,比如减少了某一行代码或者新增了某一个行代码。同样是按 Q 键退出查看。