配置
$ git init
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
$ ssh-keygen -t rsa -C "youremail@example.com" //创建SSH Key
$ 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"
$ git config --global core.autocrlf false //禁用自动转换 在Linux下的换行符为LF,而windows下的换行符为 CRLF
远程操作
$ git remote add origin git@github.com:michaelliao/learngit.git
//$ git checkout -b dev origin/dev //创建和跳转到与远程关联的dev分支
//$ git branch --set-upstream dev origin/dev //指定本地dev分支与远程origin/dev分支的链接
$ git pull origin master
$ git pull origin dev
$ git push -u origin master //-u将本地master与远程master相关联
$ git push origin master
$ git push origin dev
$ git clone git@github.com:michaelliao/learngit.git
$ git remote rename oringin origin //修改远程的名字
工作区,版本库 操作
$ git add readme.txt
$ git checkout -- readme.txt
$ git commit -m "wrote a readme file"
$ git rm test.txt
$ git reset --hard HEAD^
$ git reset --hard 3628164
查看
$ git status
$ git diff readme.txt
$ git log
$ git log --pretty=oneline
$ git log --graph --pretty=oneline --abbrev-commit
$ git reflog
$ git remote //查看远程库的信息
$ git remote -v
$ git branch
$ cat readme.txt
分支操作
$ git clone git@github.com:michaelliao/gitskills.git
//Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
$ git checkout -b dev == $ git branch dev $ git checkout dev
$ git merge dev
$ git branch -d <name> //删除分支
$ git merge --no-ff -m "merge with no-ff" dev
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
bug分支
$ git stash //没commit然而要修改bug,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git checkout master
$ git checkout -b issue-101
$ git add readme.txt
$ git commit -m "fix bug 101"
$ git checkout master
$ git merge --no-ff -m "merged bug fix 101" issue-101
$ git branch -d issue-101
$ git checkout dev
$ git status
$ git stash list
$ git stash pop
feature分支
$ git checkout -b feature-vulcan
$ git add vulcan.py
$ git status
$ git commit -m "add feature vulcan"
$ git checkout dev
$ git branch -d feature-vulcan
//Git友情提醒,feature-vulcan分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用命令git branch -D feature-vulcan。
$ git branch -D feature-vulcan
多人协作
$ git remote //查看远程库的信息
$ git remote -v
$ git clone git@github.com:michaelliao/learngit.git
$ git checkout -b dev origin/dev
$ git branch --set-upstream dev origin/dev //指定本地dev分支与远程origin/dev分支的链接
$ git pull
$ git push origin master
$ git push origin dev
- master分支是主分支,因此要时刻与远程同步;
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发
标签
$ git tag v1.0 //创建HEAD所在分支版本标签
$ git tag -a v0.1 -m "signed version 0.2 released" fec145a
$ git push origin v1.0
$ git push origin --tags //一次性推送全部尚未推送到远程的本地标签
$ git tag //查看
$ git tag v0.9 6224937
$ git show v0.9
- 命令git tag -d <tagname>可以删除一个本地标签;
- 命令git push origin :refs/tags/<tagname>可以删除一个远程标签
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签 私钥签名标签看网址https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951758572072ce1dc172b4178b910d31bc7521ee4000
别名
$ git config --global alias.st status
//--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用
$ 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"
配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中
$ cat .git/config
别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。
而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中