Git是分布式版本控制系统
Git创造者Linus,也是linux内核的设计者。
生成git仓库
git init
把文件添加到git仓库
git add filename
把文件修改添加到暂存区(stage)。
若要添加当前目录下所有文件
git add .
提交文件到仓库
git commit -m "explain"
-m参数为本次提交的说明。把暂存区的所有内容提交到当前分支(默认git会创建master分支)。
查看仓库状态
git status
查看上次修改内容
git diff filename
查看修改历史记录
git log
显示从最近到最远的提交日志。--pretty=oneline可以将每次修改显示为一行。
回退到上一版本
git reset --hard HEAD^
HEAD代表当前版本,HEAD^代表上一版本,上上版本HEAD^^,上10版本HEAD~10。
回到未来版本
git reset --hard 2354611
2354611是commit id前几位,不必写全,也不能写太少,git能自动找到确定的一个版本就行。
查看命令历史,可找到commit id
git reflog
查看工作区和版本库里面最新版本的区别
git diff HEAD -- filename
撤销工作区的修改
git checkout -- filename
两种情况:1.从修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态。2.已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
撤销暂存区修改
git reset HEAD filename
删除工作区文件
rm filename
删除版本库文件
git rm filename git commit -m "remove filename"
创建并切换分支
git checkout -b test
-b参数表示创建并切换。也可用下面2个命令:
git branch test
git checkout test
查看当前分支
git branch
git branch
命令会列出所有分支,当前分支前面会标一个*
号。
合并分支工作
git merge test
git merge
命令用于合并指定分支到当前分支。
删除分支
git branch -d test
查看分支合并图
git log --graph --pretty=oneline --abbrev-commit
禁用Fast forward
模式,Git就会在merge时生成一个新的commit
git merge --no-ff -m "merge with no-ff" test
--no-ff
参数,表示禁用Fast forward。
保存现场,去修复bug
git stash git stash list git stash apply #恢复后stash内容不删除 git stash pop #恢复后stash内容删除 git stash apply stash@{0} #恢复指定stash
查看远程库信息
git remote
加-v参数显示更详细信息。
推送分支
git push origin master
推送master分支,也可修改为其他分支。
在本地创建和远程分支对应的分支
git checkout -b branch-name origin/branch-name
建立本地分支和远程分支的关联
git branch --set-upstream branch-name origin/branch-name
从远程抓取分支
git pull
打标签
git tag <name>
查看所有标签
git tag
找到历史提交的commit id
git log --pretty=oneline --abbrev-commit
给对应commit id打标签
git tag v0.9 commit id
查看标签信息
git show <tagname>
创建带有说明的标签
git tag -a v0.1 -m "version 0.1 released" commit id
-a
指定标签名,-m
指定说明文字
PGP签名标签
git tag -s <tagname> -m "fffddd."
删除标签
git tag -d v0.1
推送某个标签到远程
git push origin <tagname>
一次性推送全部尚未推送到远程的本地标签
git push origin --tags
删除远程标签
git tag -d v0.1 #先删除本地标签 git push origin :refs/tags/v0.1 #从远程删除
配置别名
git config --global alias.st status 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"