个人的网站学习记录
Git学习
git版本管理工具学习,记录一些常用的命令

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