接触 Git 有段时间了,一直想写一篇有关 Git 的学习文档但却无从写起。因为平时都仅简单地使用一些 Git 常用命令,也未深究其原理。
最近看了一些有关 Git 的学习资源,推荐给大家 try-git 游戏式学习Git 廖雪峰 Pro Git
仅将 Git 中常用命令做一汇总,以便查询。
Git 基本命令
git config
安装完 Git 后,首先要进行基本的配置。
# 用户信息设置
~$ git config --global user.name "Your Name"
~$ git config --global user.email "email@example.com"
# 高亮Git
~$ git config --global color.ui true
# Git 别名
~$ git config --global alias.co checkout
~$ git config --global alias.ci commit
~$ git config --global alias.br branch
~$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git int
Git 仓库初始化。在工作区创建隐藏目录 .git,这是 Git 的版本库,其中重要的就是称为stage(或者叫index)的暂存区和当前分支。
git add <file>
将工作区文件修改提交至版本库的暂存区中,可以使用 . 或者 -A 参数。
git commit
将版本库的暂存区中所有内容提交至版本库的当前分支中,使用 -m 参数进行修改说明。
git status
查看工作区状态。
git diff
查看修改内容,显示的格式是Unix通用的diff格式。
git log
# 查看提交历史
~$ git log
# 查看合并情况
~$ git log --graph
~$ git log --graph --pretty=oneline --abbrev-commit
git reflog
查看命令历史。
git checkout -- file
撤销工作区的修改,无论是修改还是删除文件。
git reset
1. 撤销暂存区的修改:
~$ git reset HEAD file
2. 撤销本次提交(版本回退):
# 撤销至上一次提交
~$ git reset --hard HEAD^
# 撤销至上两次提交
~$ git reset --hard HEAD^^
# 撤销至上100次提交
~$ git reset --hard HEAD~100
# 撤销至某一次提交,可以回退到未来
~$ git reset --hard commit_id
分支管理
git branch
# 查看分支
~$ git branch
# 创建分支
~$ git branch <name>
# 删除分支
~$ git branch -d <name>
# 强行删除分支
~$ git branch -D <name>
git checkout
# 切换分支
~$ git checkout <name>
# 创建+切换分支
~$ git checkout -b <name>
# 在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致
~$ git checkout -b branch-name origin/branch-name
# 建立本地分支和远程分支的关联
~$ git branch --set-upstream branch-name origin/branch-name
git merge
Git 分支合并出现冲突时,必须首先解决冲突。解决冲突后,再提交,合并完成。
# 合并某分支到当前分支
~$ git merge <name>
# 加上--no-ff参数就可以用普通模式合并,合并时生成一个新的commit.
# 合并后的历史有分支,能看出来曾经做过合并
~$ git merge --no-ff -m "merge with no-ff" <name>
git stash
用于正在期间,解决临时 bug 。
可以先使用git stash 将工作区保存起来,然后新建 bug 分支修复 bug,然后合并至 dev 分支,删除 bug 分支,回到以前的分支后,用git stash pop回到工作现场。
# 将工作区的内容临时保存起来
~$ git stash
# 查看临时保存的工作区
~$ git stash list
# 恢复工作区,但stash内容不删除
~$ git stash apply
# 删除stash内容
~$ git stash drop
# 恢复工作区并删除stash内容
~$ git stash pop
远程仓库
1、 首先查看用户主目录下隐藏目录.ssh中有无 id_rsa 和 id_rsa.pub 这两个文件。
若没有则可以通过以下命令进行创建SSH Key
~$ ssh-keygen -t rsa -C "youremail@example.com"
由于此 key 不会用于军事,无需对key设置密码,一路NEXT,所有都是默认值就可以了。
id_rsa : 私钥,不要告诉任何人。
id_rsa.pub : 公钥,可以告诉其他人。
2、 登陆 Github 账号,将 id_rsa.pub 的内容粘贴至 SSH Keys 处。
3、 GitHub 支持多种协议,如果你使用 ssh 协议进行推送的话,只要 GitHub 知道你的公钥,是不需要输入密码的。
git remote
远程仓库管理,例如:
# 查看远程库信息
~$ git remote
# 查看远程库详细信息
~$ git remote -v
# 将本地库与远程库建立链接
~$ git remote add origin URL
# 修改本地库的远程库链接
~$ git remote set-url origin URL
远程库的名字就是origin,这是Git默认的叫法。
git clone
从远端仓库克隆,例如:
~$ git clone git@github.com:michaelliao/gitskills.git
git push
将本地库推送至远端。例如:
~$ git push origin master
~$ git push -u origin master
第一次推送时需加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git pull
抓取远程的新提交
标签操作
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(标签不能移动),所以,创建和删除标签都是瞬间完成的。
git tag
# 查看所有标签
~$ git tag
# 创建新标签,默认为HEAD
~$ git tag <name>
# 创建新标签,指向commit-id
~$ git tag <name> commit—id
# 创建带有说明的标签,用-a指定标签名,-m指定说明文字
~$ git tag -a v0.1 -m "version 0.1 released" 3628164
# 可以删除一个本地标签
~$ git tag -d <tagname>
# 可以删除一个远程标签。
~$ git push origin :refs/tags/<tagname>
# 可以推送一个本地标签
~$ git push origin <tagname>
# 可以推送全部未推送过的本地标签
~$ git push origin --tags
git show
# 查看标签信息
~$ git show <tagname>
GO-BACK UP-LEVEL TOP