这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
一、本堂课重点内容
- Git简介
- 使用Git管理文件版本
- 远程仓库使用
- 分支管理
二、详细知识点介绍
GIT命令
配置个人信息 一般是在 C:\Users\windows用户名
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
创建版本库
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
-
使用命令
git add <file>,注意,可反复多次使用,添加多个文件; -
使用命令
git commit -m <message>,完成。
本地仓库
-
要随时掌握工作区的状态,使用
git status命令。 -
如果
git status告诉你有文件被修改过,用git diff可以查看修改内容
版本回退
-
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 -
穿梭前,用
git log或git log --pretty=oneline可以查看提交历史,以便确定要回退到哪个版本。 -
要重返未来,用
git reflog查看命令历史,以便确定要回到未来的哪个版本。
工作区和暂存区
暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。
没弄明白暂存区是怎么回事的童鞋,请向上滚动页面,再看一次。
管理修改
git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
撤销修改
git restore <file>...
git restore --staged <file>...
删除文件
git show <版本号> 查看这个版本号的修改明显
git add/rm <file>...
恢复误删的文件:git checkout <版本号> test.txt,这个版本不能是删除这个文件的版本
远程仓库
创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
gitee.com/,注册账号,把这个公钥配置到gitee个人设置里面去
新建远程仓库
添加远程库
让本地仓库与远程仓库关联
git remote add origin git@gitee.com:xxx/learngit.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
删除远程库
git remote -v #查看远程库信息
然后,根据名字删除,比如删除origin:
git remote rm origin
处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。
远程库克隆
git clone git@gitee.com:xxx/learngit.git
分支管理
创建与合并分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git switch <name> 或者git checkout <name>
创建+切换分支:git switch -c <name>或者git checkout -b <name>
合并某分支到当前分支:git merge <name> 通常都是站在master分支上合并其它分支
删除分支:git branch -d <name>
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。
--abbrev-commit仅显示 SHA-1 校验和所有 40 个字符中的前几个字符
git log --graph --pretty=oneline --abbrev-commit
分支管理策略
git merge dev --no-ff -m "merge with no-ff"
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
Bug分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug
git stash list 查看stash
修复后,再git stash pop,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
Feature分支
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
多人协作
推送分支
git push origin master
如果要推送其他分支,比如dev,就改成:
git push origin dev
git branch --set-upstream-to origin/<branch-name> <branch-name> 使用这个命令关联分支后,push/pull 的时候就不用带后面的远程仓库和分支
抓取分支
创建远程origin的dev分支到本地
git swtich -b dev origin/dev
git pull origin dev:dev
因此,多人协作的工作模式通常是这样:
-
首先,可以试图用
git push origin <branch-name>推送自己的修改; -
如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull试图合并; -
如果合并有冲突,则解决冲突,并在本地提交;
-
没有冲突或者解决掉冲突后,再用
git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/<branch-name> <branch-name>。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
git push 和 git pull 本质上都是merge
git push:如果没有冲突,那么实际上默认在远程仓库提交一次,版本往前推一次。
git pull:如果没有冲突,那么实际上市默认在本地仓库提交一次,版本往前推一次。
git push:如果有冲突,必须先pull,解决完成冲突,本地仓库手动提交一次,版本往前推一次;然后再push。
git pull:如果有冲突,解决完冲突,本地仓库手动提交一次,版本往前推进一次。
在push或者pull之前,最好你的工作区和暂存区都是干净的
注意:在每一次push之前,为了避免因冲突而提示错误,我们都要习惯性的进行pull操作。