git init 初始化一个Git仓库
git status 查看当前状态
git add <file> 添加到暂存区
git commit -m <message> 提交到当前分支
git diff <filename> 查看指定的文件,在工作区和仓库中有什么不同
git log --pretty=oneline 显示从最近到最远的提交日志,--pretty=oneline每个commit只显示一行
git reset --hard HEAD^ 回退到上一个版本,HEAD^^是上上个版本,前提是在push之前
git reset --hard commit_id 回到未来的某个版本,前提是在push之前
git reflog 查看你的每一次命令,可以看到提交历史
git checkout -- <file> 丢弃工作区的修改,这里有两种情况:
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git reset HEAD <file> 把暂存区的修改撤销掉(unstage),重新放回工作区
git rm <file> 从版本库中删除文件
ssh-keygen -t rsa -C "youremail@example.com" 创建SSH Key
git remote add origin git@github.com:michaelliao/learngit.git 本地仓库关联GitHub仓库
git push -u origin master 把本地库的内容推送到远程。由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
git clone git@github.com:michaelliao/gitskills.git 从远程仓库克隆
git checkout -b dev 创建并切换到dev分支,相当于两条命令:git branch dev
git checkout dev
git checkout -b dev origin/dev 创建远程的dev分支到本地
git branch 查看分支
git merge dev 返回到master分支后,使用此命令把dev
分支的工作成果合并到当前分支
默认使用fast-forward方式,只是移动指针,执行速度很快
git branch -d dev 合并以后,就可以删除dev分支,fast-forward模式下,会丢掉分支信息。
git log --graph --pretty=oneline 查看分支合并图,--abbrev-commit使用短的commit-id
两个分支都进行了提交,合并的时候会冲突,需要先解决冲突再合并
git merge --no-ff -m "message" dev --no-ff禁用fast-forward,Git就会在merge时生成一个新的commit
git stash 工作进行到一般没法提交,需要切换到别的分支进行更紧急的任务,比如修复 一个bug,此时可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list 查看保存的工作现场
git stash apply 恢复工作现场,但是恢复后,stash内容并不删除,需要用git stash drop
来删除
git stash pop 恢复的同时把stash内容也删了
git stash apply stash@{0} 恢复指定的stash
git branch -D feature-vulcan 分支还没有被合并,如果删除,将丢失掉修改。使用大写的-D
参数强行删除。
git remote 查看远程仓库,-v参数显示详细信息
git pull push冲突时,先用此命令把最新的提交从origin/dev
抓下来,然后,
在本地合并,解决冲突,再推送
git branch --set-upstream-to=origin/dev dev 如果pull失败了,原因是没有指定本地dev
分支与远程origin/dev
分支的链接
此命令设置dev和origin/dev的链接
git rebase 把本地未push的分叉提交历史整理成直线
git tag <name> 打一个新标签,标签是版本库的快照,指向某个commit的指针,跟分支很像
但是分支可以移动,标签不能移动,所以,创建和删除标签都是瞬间完成的。
git tag 查看所有标签
git tag <name> commit-id 针对某次提交打标签
git show <tagname> 查看标签信息
git tag -a v0.1 -m "message" commit-id 创建带说明的标签,-a指定标签名
git tag -d v0.1 删除标签
git add -f <file> 文件被.gitignore
忽略了,可以用-f
强制添加到Git
git check-ignore -v <file> 查看跟某个文件有关联的.gitignore规则
git config --global alias.st status 配置命令的别名
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" 这么变态的命令取个别名可以节省很多时间。