引言
记录工作中常用到的git指令,参考廖雪峰的git教程。
1、git初始化
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
2、创建版本库
$ git init # 把当前目录变成Git可以管理的仓库
$ git add readme.txt # 把文件添加到仓库
$ git commit -m "wrote a readme file" # 把文件提交到仓库
3、版本回退
$ git log # 显示从最近到最远的提交日志
$ git reset --hard HEAD^ # 回退到上一个版本
上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
$ git reset --hard 3628164 # 根据commit id回滚,无须写全
如果要重返未来?用 reflog找到之前的commit id。
$ git reflog # 查看每一次操作记录
4、工作区、暂存区

$ git status # 查看当前状态
Git跟踪并管理的是修改,而非文件。
$ git diff HEAD -- readme.txt # 查看工作区和版本库里面最新版本的区别
5、撤销修改
$ git checkout -- readme.txt # 丢弃工作区的修改
这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
$ git reset HEAD readme.txt # 把暂存区的修改撤销掉(unstage),重新放回工作区
6、删除文件
$ rm test.txt # 本地删除
$ git rm test.txt # git删除
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是只能恢复文件到最新版本,会丢失最近一次提交后你修改的内容。
7、远程仓库
创建ssh:
$ ssh-keygen -t rsa -C "youremail@example.com" # 创建ssh
关联远程仓库:
$ git remote add origin git@server-name:path/repo-name.git # 关联远程仓库
推送本地更新:
$ git push -u origin master # 第一次推送master分支的所有内容
$ git push origin master # 后续推送最新修改
克隆远程仓库:
$ git clone git@github.com:path/repo-name.git # 克隆远程仓库
8、分支管理
创建并切换分支:
$ git branch <name> # 创建分支
$ git checkout <name> # 切换分支
$ git checkout -b dev # 创建并切换到分支dev,相当于上面两条命令
$ git branch -a # 查看所有分支
$ git branch # 查看当前分支
合并分支:
$ git merge dev
删除分支:
$ git branch -d dev
普通模式合并,能看到合并记录
$ git merge --no-ff -m "merge with no-ff" dev
保存与恢复现场:
$ git stash # 保存现场
$ git stash list # 查看stash记录
$ git stash pop # 恢复现场,同时把stash内容也删了
多人协作:
- 查看远程库信息,使用
git remote -v
; - 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用
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
,如果有冲突,要先处理冲突。
最后附上一张神图:

参考资料
[1] https://www.liaoxuefeng.com/
[2] https://git-scm.com/book/zh/v2
网友评论