我的git学习记录

由于对git还不是很熟悉,重新过了一遍git的知识

这里提供网上的一个廖雪峰老师的git的pdf

链接:https://pan.baidu.com/s/18ruaB0G8VobnG5wIc109Hg
提取码:uufp

我就是通过这个pdf重新梳理了自己的git技能

对git也有了比较好的认识

复习:git
git diff 查看修改的详情
git log命令查看历史记录
git log --pretty=oneline 可以省一些信息
git add 添加文件到仓库
git commit -m "说明"
git status 查看仓库状态
时光穿梭机
git reset --hard HEAD^ 退回上一个版本
回退到某个版本后,后悔了,想恢复到新版本,找不到新版本的commit id
git reflog 查看历史记录和commit id
历史版本穿梭: git reset --hard commit_id

工作区和暂存区
git commit只负责把暂存区的修改提交
场景一:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout --file
场景二:当你不但改乱了工作区某个文件的内容,还添加到暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到场景一,第二步按场景一操作。
场景三:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退操作,不过前提条件是没有推送到远程库。
删除文件
一般情况下,你通常直接在文件管理器中
把没有用的文件删了,或者用rm命令删除
例子:rm test.txt
现在你有两个选择:
一是确实要从版本库中删除该文件,那就用命令git rm 删掉,并且commit:
另一种情况是删错了,因为版本库里还有,所以可以很轻松地把误删的文件恢复到最新版本:
git checkout --test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原

 远程仓库

第一步:创建ssh key.
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa 和 id_rsa.pub 这两个文件,

如果已经有了,可以直接跳到下一步。如果没有,创建ssh key
ssh-keygen -t rsa -C "邮箱地址"
可以在用户主目录找到.ssh目录,
里面有id_rsa和id_rsa.pub两个文件,
这两个就是SSH Key的秘钥,id_rsa是
私钥,id_rsa.pub是公钥
第二步,登录GitHub,打开“Account settings”,"SSH Keys"页面:
"Add SSH Key",填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
点“Add Key”,你就应该看到已经添加的Key.
假如你有若干电脑,只要把每台的的电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
关联远程仓库,首先得在github中创建仓库,关联语句
git remote add origin [email protected]:vingkong/learngit.git
把本地库推送到远程,用git push,实际是把当前分支master推送到远程。
第一次推送:
git push -u origin master
之后,每次本地提交后,就可以使用命令git push origin master推送最新修改

远程仓库克隆
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。git支持多中协议,包括https,通过ssh支持的原生git协议速度最快
分支管理
创建与合并分支
git checkout -b dev
加上-b参数表示创建并切换
git branch dev
git checkout dev
用git branch命令查看当前分支:
当前分支前面会标一个* 号
dev分支工作完,切换到master分支
git checkout master
git merge命令用于合并指定分支到当前分支
合并后,删除dev分支
git branch -d dev
总结
查看分⽀:git branch
创建分⽀:git branch name
切换分⽀:git checkout name
创建+切换分⽀:git checkout -b name
合并某分⽀到当前分⽀:git merge name
删除分⽀:git branch -d name

解决冲突
一个分支修改了文件提交,
另一个分支修改不同地方了文件提交,无法合并会有冲突。
当Git⽆法⾃动合并分⽀时,就必须⾸先解决冲突。解决冲突后,再提交,合并完成。
查看分支的合并情况
git log--graph --pretty=oneline --abbrev-commit
分支管理策略
通常,合并分支时,如果可能,git会用“Fast forward”模式,但这中模式,删除分支后,会丢掉分支信息
可以强制禁用“Fast forWard”模式,
Git就会在merge时生成一个新的commit,这样从分支历史就可以看出分支信息。
请注意--on-ff参数,表示禁用“Fast forward”
git merge --no-ff -m "merge with no-ff" dev
bug分支
情景:你当前在dev分支进行,接到修改bug的任务,当前的工作还不能提交,你现在又必须急着处理bug。
处理方法:
git stash
可以把当前的工作现场储藏起来,等以后恢复现场后继续工作
首先确定在哪个分支修复bug,
假设需要在master分支上修改,就从
master创建临时分支:
git checkout master
创建临时分支issue-101
git checkout b issue-101
修改好bug,切换到master分支,并完成合并,最后删除issue-101分支
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
git branch -d issue101
修复完后要回到之前的dev分支干活
git checkout dev
发现工作现场是干净的,
使用git stash list 查看
Git把stash内容存到某个地方了
恢复有两个办法:
第一种:git stash apply恢复后,stash内容并不删除,使用git stash drop来删除
第二种:git stash pop,恢复的同时把
stash内容也删了

 

Feature分支
场景:添加一个新功能时,是不希望因为一些实验性的代码,把主分支搞乱了,所以,每添加一个新功能,

最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支
任务:开发代号为Valcan的新功能
git checkout -b feature-vulcan
开发完,提交,切回dev,准备合并:
git checkout dev
一切顺利的话,feature分支和bug分支类似的,合并,删除
但是,此时接到上级命令,新功能取消,分支需要取消,使用命令
git branch -d feature-vulcan
销毁失败。Git友情提示:
feature-vulcan分支还没有合并,如果删除,将丢失掉修改,需要强行删除:git branch -D feature-vulcan
小结:
开发一个新feature,最好新建一个分支
如果要丢弃一个没有被合并过的分支,可以通过git branch -D name
强行删除

多人协作
当你从远程仓库克隆,
git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
查看远程仓库的信息,用
git remote 或者
git remote -v显示更详细
推送分支
git push origin master
如果要推送其他分支,dev
git push origin dev
哪些分支需要推送:
master分支时主分支,因此要时刻与远程同步
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步
bug分支只用于在本地修复bug,就没有必要推到远程了
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发
创建远程分支

补充:创建远程分支
首先需要创建一个本地分支
现在在master分支上,
git checkout -b dev
把新建的本地分支push到远程
服务器,远程分支与本地分支同名
git push origin dev:dev
使用git branch -a 查看所有分支,
会看到dev分支,说明创建dev分支成功
删除远程分支:
git push orgin :dev
推送一个空的分支到远程分支,其实就相当于删除远程分支
也可以使用
git push orgin --delete dev

抓取分支
多人协作是,都会往master和dev分支推送各自的修改
场景:
你的小伙伴,从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。小伙伴要在dev分支上开发,创建origin的dev分支到本地
git checkout -b dev origin/dev
翻译该语句
本地创建并且切换到dev分支上,接着跟远程origin地址上的dev分支关联起来,origin代表是一个路径,
git remote -v 查看
他现在在dev上继续修改,然后时不时地把dev分支push到远程
碰巧,你也对同样的文件作了修改,试图推送:将推送失败.
因为你的小伙伴的最新提交和你试图推送的提交有冲突。
处理方法:git pull 把最新的提交从
origin/dev抓下来,在本地合并,解决冲突,再推送。
git pull 也失败。
原因是没有指定本地dev和远程origin/dev分支的链接,使用
git branch --set-upstream dev origin/dev
在pull

标签管理
git 的标签虽然是版本库的快照,但其实它就是指向某个commit的指针

创建标签
首先需要打标签的分支上:
git branch
git tag v1.0
查看标签
git tag
v1.0
默认标签是打在最新提交的commit上。有时候,如果忘了打标签,
比如已经周五了,但应该在周一打的标签没有打
找到历史提交的commit id ,然后打上
git log --pretty=oneline --abbrev-commit
git tag v0.9 6224937
在用命令git tag 查看标签:
git tag
注:标签不是按时间顺序列出,而是按字母排序的
git show tagname查看标签信息:
git show v0.9
操作标签
如果标签打错了,也可以删除
git tag -d v0.1
推送某个标签到远程,使用命令
git push origin v1.0
或者一次性全部尚未推送到远程的本地标签
git push origin --tags
如果已经推送到远程,要删除远程标签就麻烦一点:先删除本地
git tag d v0.9
再删除远程:
git push origin :refs/tags/v0.9

猜你喜欢

转载自www.cnblogs.com/Vinkong/p/12679507.html