生成SSH:可以通过git bash
分支:
用于独立完成每个单独功能,最后合并到主干。
Merge Request :分支提出合并请求。
审阅人审阅通过后点击Merge通过请求是该分支的代码合并到主干。
审阅人Merge时如果选择delete会合并该分支代码到主干后删除该分支。
如果选择另一个会合并代码到主干后保留该分支。
知识点(概念):
Git里创建的文件不带后缀名,需要自己添加后缀名。
fork:用于拷贝项目代码。
issue board:多任务管理栏(类似贴任务便利条的黑板)
CI(continued integration):持续集成
pipeline(时间线):build
WiKi:用于记录信息
什么是SSH协议:用于拉代码时进行验证,用这种方式不需要每次都输入用户名和密码(当然如果用大乌龟会自动记录用户名和密码,也不用每次都输),并且这种方式比较安全(好像会检测登录电脑)。
git add命令将修改保存到暂存区,git commit命令将所有暂存区的内容一次提交到本地的分支。
注意commit时只会将在暂存区(add过的进入暂存区)的内容提交到分支,如果多次修改而有些add有些没add,这时候commit则只会提交add过后在暂存区的内容。
常用命令:
配置:
第一次安装后需要配置自己的用户名和邮箱:
git config --global user.name "Your Name“. (经过检验,格式必须是两条横杠)
git config --global user.email you@example.com.
配置完之后如何查看配置的信息:
git config --global --list.
生成SSH公钥:
ssh-keygen -t rsa -C "your.email@example.com" -b 4096
查看SSH公钥:
cat ~/.ssh/id_rsa.pub ##(图形化界面下可以直接找到该文件打开)
基础功能:
添加修改的代码到缓冲区:
git add 加文件全路径或相对路径名
提交修改的代码到本地仓库:
git commit -m "双引号内写提交日志,就用这种写法一步到位,否则还要再弹出vi编辑器编辑日志,非常麻烦" ##这种写法必须在完成前一步的情况下才能进行
git commit -a -m "日志" ##这种写法在该git文件夹进行的是非添加文件的更改时,可以不用写git add,被-a代替完成。如果新增文件,则必须一个一个的git add。
查看分支状态(是否有什么没提交或add);
git status
git diff
git branch ##查看有哪些分支
分支相关(本地):
概念:
1.主干的名称为master
2.如果分支只是在主干的基础上添加内容,则主干合并该分支时默认会使用fast forward模式,直接将新增内容合并到主干中,这种合并模式在git log中看不到分支出现过的记录。
如果想看到分支记录,就要使用普通的分支合并模式,合并时加上--no-ff参数。即:
git merge --no-ff -m "这里写信息" 加分支名 ##例:git merge --no-ff -m "merge with no-ff" branchA
创建分支:
git branch 加分支名
切换分支:
git checkout 加分支名 或 git switch 加分支名
创建分支并切换到该分支(前两步的整合,快捷方式):
git checkout -b 加分支名 或 git switch -c 加分支名
使用分支想要和主干合并:
使用gitlab网站提交merge request申请,添加申请备注,并指定代码审查人。
使用主干想要合并分支:
git merge 加想合并的分支名
查看分支合并图:
git log --graph
删除分支: ##只能删除别的分支,不能在自己的分支上删除自己,不知道为什么删除后不能提交到云端
git branch -d 加分支名
git branch -D 加分支名 ##如果删除有不同的内容却还没有合并过的分支,git会报错,这时可以使用-D参数强制删除
分支push:
如果想将在本地创建的分支(云顿没有)push到云端,
方式一:在该分支使用命令: git push --set-upstream origin 加分支名 ##推荐,用过一次后就将当前分支与云端分支绑定,以后可以直接使用git push
方式二:使用git push origin 加分支名 ##这种方式每次都养注明分支名
临时储存(不提交的情况下保存工作区的内容):
git stash ##将当前所在分支的工作区内容存储起来
git stash list ##查看stash命令存储的工作区内容(因为该命令可以多次使用,储存多个不同的进度时的工作区内容)
恢复:
只存储了一个工作区内容的情况下:
git stash pop ##恢复成储存的内容并删除该储存内容
存储了多个工作区内容的情况下:
1.git stash list ##查看存储的有哪些版本的内容
2.git stash apply 加版本号 ##应用成该版本号对应的内容
3.git stash drop ##删除存储的内容(git pop相当于23两个命令加起来)
cherry-pick:
廖雪峰老师是这么说的:
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。 ##这里的commit是指修改bug的那个提交对应的SHA1值
调出自带的分支发展图:
gitk
撤销(回退):
撤销在工作区进行的修改(新建了文件无法通过该命令撤销):
git restore 加文件名 ##撤销是直接撤销至该文件最近自此add的内容处,不论你修改了多少(次)内容,只要你没add,都会直接撤销成上一次add的内容。
##可以通过此命令撤销自己的修改,但你想再还原回修改的内容就不可能了。git reflog都不会显示这个操作。
撤销删除:
使用rm删除后恢复::
git restore 加文件名 ##文件进行add操作后被删除可以恢复工作区删除的文件至add版本,只在工作区新建删除没有add过无法恢复。
##如果文件还被commit过,则被删除后会优先恢复到commit的版本,如果commit后又修改了然后add,不会恢复成add版本。
使用git rm删除后恢复(git rm操作只能删除已经被commit到分支的内容,没有add过或add过没有commit的使用该命令会报错,自然恢复的也是commit版本;git rm相当于rm a.txt后又git add a.txt,即删除并将删除操作记录到了暂存区,一步相当于两步):
1.git restore --staged 加文件名
2.git restore 加文件名
撤销add操作(add进暂存区后想撤回):
git restore --stage 加文件名
版本回退(撤销commit操作,无法撤销到add状态,只能直接回退到上一个commit版本):
1.git log ##显示历史提交记录,及每条记录对应的SHA1值
2.git reset --hard 加要回退到的记录处对应的SHA1值
版本前进(如果回退后又想重回现在时间之后的记录处,则只需知道该处的SHA1值,也可以通过git reset恢复成该记录的内容):
1.git reflog ##该命令可以显示所有操作过的命令记录,从而可以获得当前时间之后的记录的SHA1值。因为git log只会显示该记录时间线之前的commit历史,而不会显示之后的历史
2.git reset --hard 加要前进到的记录处对应的SHA1值
云端仓库相关(gitee,github,gitlab):
连接方式:
一:本地创建仓库连接:
1.git init
2.git remote add origin 加仓库SSH的URL ##将本地仓库与云端仓库关联
注意一:如果云端已有内容,本地想推送就要解决冲突:将云端内容拉下来并rebase来解决冲突: git pull origin master --rebase
注意二:如果提示git origin already exists.则说明这个本地仓库已经和一个其他远程仓库关联,这时的解决方式:
1.git remote -v ##查看该本地仓库已经关联了哪些远程库
2.方式一:git remote rm origin ##删除关联的远程库
方式二:git remote add 加给远程库起的名字(如github,gitee) 加从云端仓库网站复制的URL ##这种方式使一个本地仓库关联多个远程仓库
注意:使用这种方式下面的推送方式就不再适用了,应该使用:
git push 加自己起的远程库名字 加push到该库的哪个分支
3.git push --set-upstream origin master ##将本地内容推送到云端并将本地此分支与云端master分支关联
4.git push ##之后再推送就只需要使用git push了。
二:直接使用clone命令:
git clone 加从云端仓库网站复制的URL
查看连接的云端仓库:
git remote (-v) ##加-v参数可以更详细的显示远端仓库的信息
将本地仓库分支推送到云端仓库分支:
git push 加云端仓库名 加本地仓库分支名 ##push前一定要先检查自己是否commit了,想push成功本地最新内容,无论进行了增删改哪种操作,都要commit后再push。
##如果将本地仓库的分支和云端仓库的分支关联了,则只需要适用git push即可。
云端代码被别人合并了,被更改,我们需要重新拉取:
git pull
概念:
云端有多个分支,但我们拉取时只能拉取到master分支
本地切换成云端的其他分支:
git switch -c 加分支名 加云端仓库名/云端仓库分支名 ##在本地创建一个分支并与云端的相应分支关联。
多人协作的工作模式通常是这样:
1.首先,可以试图用git push origin <branch-name>推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
5.如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
这就是多人协作的工作模式
git pull --rebase:
因为git log的查看是按照时间线排序的,所以如果你push后会按照你本地add和commit来显示git log,这样会显得非常乱,
而如果用git rebase就会将你原来的add,commit时间都改为你进行执行该git rebase的时间后,这样时间线就会显得比较清晰明了。
git pull + git rebase == git pull --rebase ??? 没实践,懒得弄了
标签:就是给commit一个易于寻找的标记
查看所有已经存在的标签:
git tag
查看某个标签的详细信息:
git show 加标签名 ##例:git show v1.1
给最新commit后的仓库打标签:
git tag 加标签名 ##例:git tag v1.0
给历史上某个commit后的仓库打标签:
git tag 加标签名 加该commit对应的SHA1值 ##例:git tag v1.1 s3c68v
给某个commit打标签的同时添加说明信息:
git tag -a 加标签名 -m "引号内添加说明信息" 加commit对应的SHA1值
删除标签:
git tag -d 加标签名
标签都存储在内地,如果要推送某一个标签到远程:
git push origin 加标签名
推送所有标签到远程:
git push origin -tags
删除自己推送到远程的标签:
1.git tag -d 加标签名 ##删除本地仓库的标签
2.git push origin :refs/tags/加该标签名 ##删除对应的云端仓库的标签
老师的三个问题:
git rebase ##取代git merge功能,使条理更清晰 --第二个问题:怎么。。。。
git pull --rebase ##用于团队协作时从云端拉代码,这种拉法是git rebase的方式拉。
cherry pick ##用于将多条功能中取一条功能保留合并到master上。 --第三个问题:怎么将多条功能中取一条功能保留