Git命令
创建版本库
- 初始化一个Git仓库:git init
- 添加文件到Git仓库,分两步:
- 第一步,告诉git添加文件,添加到暂存区: git add
,注意,可反复多次使用,添加多个文件; - 第二步,告诉文件添加文件到仓库提交到当前分支:git commit -m <”commit”>,完成。
- 查看工作区状态: git status
- 查看修改内容:git diff
- 查看工作区和版本库里面最新版本的区别:git diff HEAD –
- 查看文件内容: cat
日志
- 显示从最近到最远的提交日志 git log
- 简化日志查看git log –pretty=oneline
- 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本
- 分支合并图: git log –graph –pretty=oneline –abbrev-commit
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
回退到上一个版本:git reset –hard HEAD^/使用命令git reset –hard commit_i
撤销修改
把文件在工作区的修改全部撤销,就是让这个文件回到最近一次git commit或git add时的状态
- 文件自修改后还没有被放到暂存区
- git checkout – file 命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令
- 文件已经添加到暂存区后
- git reset HEAD file可以把暂存区的修改撤销掉
删除文件
- 直接在文件管理器中把没用的文件删:rm
- 确实要从版本库中删除该文件:那就用命令git rm
删掉,并且git commit:
远程仓库
- 创建SSH Key : ssh-keygen -t rsa -C “youremail@example.com”
- 关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git
- 第一次推送master分支的所有内容:git push -u origin master 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
- 远程库已经准备好了,下一步是用命令git clone克隆一个本地库:git clone git@github.com:michaelliao/gitskills.git
分支
- 查看分支:git branch
- 创建分支:git branch
- 切换分支:git checkout
- 创建+切换分支:git checkout -b
- 合并某分支到当前分支:git merge
- 删除分支:git branch -d
- 普通模式合并,合并后的历史有分支,能看出来曾经做过合并:git merge –no-ff -m “merge with no-ff” dev
Bug分支
- 把当前工作现场“储藏”起来,等以后恢复现场后继续工作:git stash
- 首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支
$ git checkout master git checkout -b issue-101
- 修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
git checkout master git merge –no-ff -m “merged bug fix 101” issue-101 git branch -d issue-101
- 接着回到dev分支干活
git checkout dev 用git stash list命令看看存储的工作现场 工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法: 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除; 另一种方式是用git stash pop,恢复的同时把stash内容也删了: 可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令
- git stash apply stash@{0}
- 如果要丢弃一个没有被合并过的分支,可以通过git branch -D
强行删除
远程分支
程分支就是本地分支push到服务器上的时候产生的:git push origin dev 会产生一个dev远程分支
- 查看远程和本地分支 :git branch -a
- 查看远程库信息,使用: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,如果有冲突,要先处理冲突。
标签管理
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
- tag
用于新建一个标签,默认为HEAD,也可以指定一个commit id; - git tag -a
-m "blablabla..."可以指定标签信息; - git tag -s
-m "blablabla..."可以用PGP签名标签; - git tag可以查看所有标签
- git push origin
可以推送一个本地标签; - git push origin –tags可以推送全部未推送过的本地标签;
- git tag -d
可以删除一个本地标签; - git push origin :refs/tags/
可以删除一个远程标签。