Git 常用命令总结

主要概念

工作区:git init的当前目录,工程的根目录下,对所有文件的信息抽象

版本库:.git目录

stage暂存区:版本库中的stage暂存区,git add会将数据存到stage

分支:一个版本库中有多个分支:master,dev等,每个分支保存文件的修改信息,commit会将文件的修改保存到分支

stash: 保存工作现场

.gitignore: git忽略文件,要忽略某种文件时,可以把要忽略的文件名填进去,注意.gitignore要提交


基础命令

  • git init :将目录变为仓库

  • git add [file] 添加文件到仓库,可多次使用(实际上是将文件修改存放到stage暂存区)

  • git commit -m “first commit” 把文件提交到仓库(实际上是将stage的所有内容提交到当前分支)


版本回退、修改管理与撤销

  • git log [–pretty=oneline] 显示从最近到最远的提交日志

  • git reset –hard HEAD^ 回退到上一版本(HEAD永远指向当前版本,HEAD^表示上1版本,HEAD^^表示上2版本,HEAD~100表示上100版本)

  • git reset –hard 1094a 回退到指定的某一版本,1094a为某个commitID(SHA1计算得到)的前几位数,无需写全

  • git reflog 查看你的每一次操作

  • git status 查看工作区的状态

  • git diff HEAD – readme.txt 查看工作区和版本库里面最新版本的区别

  • git checkout – [file]

    1. 功能:丢弃工作区的修改:如果file修改后还没有放到stage,则撤销修改后就和版本库一模一样;如果file已放到stage,又进行了修改,现在撤销修改则是回到添加到stage后的状态

    2. 误删工作区的文件,想恢复,则使用该命令可将版本库中的文件恢复到工作区

  • git reset HEAD [file] 修改已add(添加到了暂存区),但未commit,这时要撤销修改,该命令把暂存区(stage)的修改撤销掉,重新放回工作区

  • git rm [file] 工作区删了file,但是版本库中没有,要保持一致,则使用该命令将版本库中的文件删除, 之后需要commit


远程仓库

  • git remote add origin [email protected]:bazingagain/learngit.git

    本地管理github远程库,将本地仓库内容推送到Github的origin远程库

  • git push -u origin master

    把本地库当前的master分支的内容推送到远程新的master分支,-u 将本地master与远程master关联, 以后可简化使用 git push origin master

  • git clone [email protected]:bazingagain/gitskills.git

    克隆远程库得到本地库

  • git remote -v 查看远程库信息

  • git push origin dev 将本地dev分支内容推送到远程origin库

  • git checkout -b dev origin/dev 创建远程的dev分支到本地

  • git pull 把最新的提交从远程分支中拉取下来

  • git branch –set-upstream-to=origin/dev dev 设置本地dev和远程origin/dev分支连接

tips
一般而言,我们只需将master和dev分支进行远程同步,而对于bug分支等,只需在本地进行bug修复,就没必要推送到远程了


分支管理

常用分支策略

  • git checkout -b dev 创建并切换到dev分支, -b表示创建并切换

  • git branch 查看当前分支,当前分支前有*

  • git branch dev 创建dev分支

  • git checkout dev 切换到dev分支

  • git merge dev

    把dev分支的开发成果合并到master分支(注意此时是在切换到master分支后,使用该命令), 如果存在冲突,则需要对冲突的文件(合并到master后,冲突部分会在文件中显示)进行修改,然后add,commit

  • git merge –no-ff -m “merge with no-ff” dev

    禁用Fast forward,Git就会在merge时生成一个新的commit,这样从分支历史上就可以看出分支信息(Fast forward的合并,在删除分支后,将丢到分支信息)

  • git branch -d dev 删除dev分支

  • git log –graph –pretty=oneline –abbrev-commit 查看分支的合并情况,以分支图的方式

bug分支(stash的使用策略)

  • git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作

  • git stash pop 恢复现场, 同时把stash内容也删了

  • git stash apply 恢复现场, 但不删除stash内容

  • git stash drop 删除stash中的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
修复master分支的bug方法:
当前分支: dev
1.保存现场(即dev的修改):
git stash
2.新建bug分支:
git checkout master
git checkout -b issue-101
3.修复bug:
git add readme.txt
git commit -m "fix bug 101"
4.合并bug分支的修改:
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
5.继续开发:
git checkout dev
git stash list #查看保存的工作现场
git stash pop #恢复现场, 同时把stash内容也删了

git rebase

  • git rebase

    多人协同开发时,git的提交历史会变得复杂,如果想让提交历史变为一条直线,则可以使用git rebase,配合git log --graph --pretty=oneline --abbrev-commit可以看到效果

标签

  • git tag 查看所有标签

  • git tag [tagname] [commitID]

    新建一个标签,默认为HEAD, 也可以指定一个commit id: git tag v1.0, git tag v0.9 f52c633

  • git show [tagname] 查看某个标签信息

  • git tag -a [tagname] -m “blablabla…” [commitID] 指定标签信息

  • git tag -d v0.1 删除标签

  • git push origin [tagname] 推送本地标签到远程

  • git push origin –tags 一次性推送全部尚未推送到远程的本地标签

  • git push origin :refs/tags/[tagname] 删除一个远程标签(先从本地删除该标签)

tips:

标签总是和某个commit挂钩


参考

1. 廖雪峰:Git教程

坚持原创技术分享,您的支持将鼓励我继续创作!