1、 前置知识
git:分布式的版本控制系统
GitHub:远程代码托管仓库
2、连接git
a.本地生成公钥私钥:ssh-keygen -t rsa -C "1330888958@qq.com"
b.验证本地仓库能不能和远程GitHub通信:ssh -T git@github.com
c.设置邮箱和用户名,以后在GitHub上提交信息,都会附带你的邮箱和用户名信息
git config --global user.name "ghqcentos"
git config --global user.email "gaohuqun@qq.com"
3、git操作
3.1 克隆远程仓库 git clone git@github.com:xizighq/HelloWorld.git
3.2 自动创建
3.2.1 自动生成默认远程仓库名称 origin。 可以修改,通过 .git/config 文件修改
3.2.2 本地生成一默认的分支。对应远程的分支,通过git branch -r可以看到。如下:
origin/HEAD -> origin/main
origin/main
3.3 流程概念
3.3.1 工作区:就是gitclone下来的那个文件夹。代码修改之后,可以通过git add . 或者 git add filename吧工作区的改动,提交到暂存区。
3.3.2 暂存区:有改动,先不提交,积攒到这里,最后加上说明统一提交。可以通过git commit -m "message"提交到本地仓库
3.3.3 本地仓库:可以通过git push origin main:main 将本地仓库的main分支代码,提交到远程的main分支。查看自己当前分支:git branch
3.3.4 远程仓库:
3.4 更新拉取代码:git pull
3.5 git log 获取修改记录。
commit 649c77e88ba8f7050f82a73538977521dd8e980b (HEAD -> main, origin/main, origin/HEAD)
其中:head 指针指向最新一次修改。
3.6 回退操作
3.6.1 工作区代码回退
git status 发现已经修改,但是修改不想要了。
git checkout -- filename 回退到没有修改的时候。(此处不记录到git log)
原理:就是用本地仓库的代码,覆盖掉工作区的代码。
--不能去掉,git checkout filename 是分支切换
3.6.2 暂存区代码回退
git reset HEAD filename.将暂存区代码回退,回退到工作区代码修改但是未add的状态。
3.6.3 本地仓库代码回退
git reset --hard 649c77,将本地仓库的代码回退到某个版本。
3.6.4 拓展
上述回退操作都被记录,可以通过 git reflog 查看。
3.6.5 远程仓库代码回退。
向远程仓库提交了错误代码。
错误方法:将本地仓库代码版本回退,然后 git push origin main:main给远程。这种操作是会因落后被拒绝的。
正确方法: 将本地仓库代码版本回退,然后git push -f origin main:main (-f force)
3.7 修改冲突
3.7.1 不同文件
AB修改不同文件,push。Apush之后,Bpush会被提示先poll。这种情况无冲突
3.7.2 同一文件不同行。
AB修改V1 版本main文件。A在第五行开始添加一个函数,B在第十行开始添加一个函数。A提交。
B会被提示先poll,poll之后,AB添加的连个函数,会在B的本地仓库被合并。这种情况无冲突。
3.7.3 同一文件同行
A修改V1 版本main文件第五行,B修改V1 版本main文件第五行,A提交。B提交,出现冲突,poll一下,提示要自己手动合并。
<<<< HEAD
。。。。。。。。
==========
。。。。。。。。。
>>>> xxxxxxxxxxxxxxx版本号
第一个。。。。是B,第二个是A提交的。这个时候B要手动合并。
手动合并:将冲突文件本地打开,修改,然后提交。
3.8 创建本地分支
3.8.0 https://www.jianshu.com/p/305723736c7c :git branch 的使用
3.8.1 git branch 查看本地分支,git branch -r 查看远程分支。
git branch -vv(两个v),就能够看到本地分支跟踪的远程分支。
3.8.2 git checkout -b sortdev。创建一个新的分支,并切换到这个分支。
此时 git pull 会出现错误,因为不知道从哪里拉取,没有对应的远程的分支。
分支切换:git checkout main
正确做法:在自己本地分支代码写好之后,检查之后,可以合并到自己的主分支。本地仓库合并之后,
3.8.3 git branch -d sortdev
Deleted branch sortdev (was 96df94d).
PS:如果被删除分支,还有待合并的代码,是删除不了的。
3.8.4 git push origin sortdev:main 将本地分支sortdev的代码提交到远程main分支,其中远程不存在sortdev分支
虽然没有创建远程分支,但是可以指定推到哪个分支上面。
不建议使用,详见3.9.0 。可能会有分支冲突
3.9 本地分支合并冲突处理
3.9.0 场景分析
远程main分支,V1版本,
A得到V1版本,A创建本地分支“cpy”。
B得到V1版本,B提交代码,远程main分支成为V2版本。
此时A将cpy分支合并到自己本地main分支的V1版本。
此时:A提交,失败。
解决方法:详见3.7.3 。
3.10 git的远程分支管理
3.10.1 管理员在github上创建新分支。
3.10.2 git pull本地看到新分支
3.10.3 git checkout -b dev origin/dev。本地创建一个新分支,链接到远程新分支。
附3.6.1注:
Git checkout:
1. 操作文件 2. 操作分支
操作文件
git checkout filename 放弃单个文件的修改
git checkout . 放弃当前目录下的修改
操作分支
git checkout master 将分支切换到master
git checkout -b xxx 如果分支存在则只切换分支,若不存在则创建并切换到xxx分支,
repo start是对git checkout -b这个命令的封装,将所有仓库的分支都切换到xxx,xxx是分支名,
git入门教程
最新推荐文章于 2023-05-28 16:59:59 发布