git基本操作、版本控制
git config --global user.email "email"
git config --global user.name 'username'
rm -rf .git
git config --global core.autocrlf false
git init
git add readme.txt
git commit -m 'add readme file'
git status
git diff readme.txt
git log
git reflog
git reset --hard HEAD^ or ID ##版本回退
git checkout -- readme.txt ##把readme.txt文件在工作区的修改全部撤销
git reset HEAD readme.txt ##git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本
git rm readme.txt ---> git commit -m 'delete file'
远程仓库
git remote add origin git@github.com:user/learngit.git ##添加远端项目地址
ssh-keygen -t rsa -C "username" ##之后将生成的id_rsa.pub粘贴到github中
ssh -T git@github.com
git remote -v ##查看远端项目地址
git remote rm origin ## 删除远端项目地址
git remote set-url origin git@github.com:user/leangit.git
git push -u origin master
git clone git@github.com:user/gitskills.git
出现的问题
1. ping不通github.com 需要修改host文件
分支管理
git checkout -b dev 相当于这两句 git branch dev && git checkout dev ##创建并切换到dev分支
git branch ## 查看(当前)分支
git checkout master && git merge dev ##切换回master分支并合并分支dev
git branch -d dev ## 删除分支dev
推荐用switch替代checkout:
git switch -c dev ## 创建并切换到新的dev分支
git switch master ##直接切换到已有的master分支
git log --graph --pretty=oneline --abbrev-commit ##查看分支合并图
git merge --no-ff -m "merge with no-ff" dev ##合并分支时默认采用fast forward模式,此时删除分支后会丢掉分支信息。若要保留分支信息,在merge时要添加参数no-ff
git stash ## 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list
git stash pop = git stash apply && git stash drop
git stash apply stash@{0} ##多次stash后恢复指定的stash
git cherry-pick commit_id ##复制commit所做的修改
git remote -v ##显示远程库的信息
git checkout -b dev origin/dev ## 创建dev和远程分支dev
git branch --set-upstream-to=origin/dev dev ## 设置本地dev分支和远程分支dev的链接
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master
上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
1. 首先,可以试图用
git push origin <branch-name>
推送自己的修改;
2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull
试图合并;
3. 如果合并有冲突,则解决冲突,并在本地提交;
4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>
推送就能成功!
如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
标签关联
git checkout master
git tag V1.0
git tag v0.9 f52c633
git tag
git show v0.9 ##查看标签信息
git tag -a v0.1 -m "version 0.1 released" 1094adb ## 创建带有说明的标签,-a指定标签名,-m指定说明文字
git tag -d v0.1 ## 标签删除
git push origin <tagname> ## 推送某个标签到远程
git push origin --tags ## 一次性推送到远程的本地标签
git push origin :refs/tags/<tagname> ## 删除一个远程标签,需先删除本地标签
自定义git
1. 设置别名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"
2. 配置文件都放在.git/config
中
3. 忽略特殊文件,需要配置.gitignore
文件
参考资料
1. 廖雪峰的官方网站 2. 生成多个git ssh密钥
最后修改于 2019-10-10