线上线下联通:
a,gitbash中生成密钥(右击选择git Bash): ssh-keygen -t rsa -C "zhanfangyan" //-t表示密钥类型为rsa。 -C表示用来识别密钥, 就是你自己设定的独一无二的字符串, 此时所生成的公钥中就带有这个独一无二的字符串了, 这样就方便了公钥之间的对比了。
//你的邮箱名绝对是独一无二的,所以你也可以将这个独一无二的字符串设置成你的邮箱名:ssh-keygen -t rsa -C "3529742868@qq.com"
// 回车后会出现: Enter file in which to save the key (/root/.ssh/id_rsa):
# 输入要保存的密匙文件位置,直接回车 默认即可, 一定要使用默认的地址
Enter passphrase (empty for no passphrase):
# 输入密匙的密码,可直接回车留空,也可以输入密码来进一步增强安全性
Enter same passphrase again:
# 重复输入一次密匙的密码-
-
-
-
b, 查看公钥: cat ~/.ssh/id_rsa.pub // cat表示读取, ~表示生成的ssh密钥的默认根路径,只有使用cat ~才能读取到密钥
-
-
-
c, 将公钥放在码云网:复制生成的公钥——打开码云——点击设置——点击ssh公钥——粘贴到公钥下——在上面标题栏中随便起一个标题——点击确认就ok了
-
-
-
d, 克隆项目到本地git clone 公钥; 这里的公钥是指克隆里的ssh公钥
1,git的使用方法:
git clone SSH地址 //克隆项目
git pull origin master //将远程master分支和本地master分支进行合并,
//远程分支有a, 本地分支有b, 合并后本地分支就有a和b
//当远程分支有a, 本地分支也有a, 但内容不一样,合并后,会将内容不一样的给你标记起来,从头到尾开始比对,只要某一行内容有一点不一样,就会将从这一行往下的所有内容在合并的时候标记起来
比如:
本地文件aa内容为:
1
2
a1
a2
a3
a4远程文件aa内容为:
1
2
3
4
5当远程文件和本地文件通过git pull进行合并后:
1
2
<<<<<<< HEAD //这个下面表示本地文件不同的地方
a1
a2
a3
a4
======= //这个下面表示远程文件不同的地方
3
4
5
>>>>>>> b19c12cae055631fb0046f22cbb53a614a92f115git push origin master //将本地的master分支提交到远程,从而将远程已有的master分支给替换掉了。
git add . //当前文件夹的所有文件保存到缓存区
git add aa.txt //将指定的文件保存到缓冲区
git commit -m '说明' //将缓存区中的内容提交到当前分支中
git checkout 分支名 //切换分支, 当修改了一个分支的内容,没有进行保存的话,是无法切换到另一个分支中的
git merge 分支名 //将指定的分支名和当前分支进行合并
2, 建立远程仓库和本地仓库的联系
git remote add origin SSH地址 //在本地和指定SSH地址的仓库建立联系
git remote rm origin //删除联系
git remote show origin //查看remote对象的元信息
3,初始化本地仓库,并在本地仓库创建分支
git init //将文件夹初始化成一个仓库,会自动生成一个.git文件夹, 找不到就说明隐藏了,需要设置一下(自己找)
git pull origin master //将远程的master和本地的进行合并
git branch AA //创建分支AA
git branch //查看所有的分支
git branch -d AA //删除分支AA, -D表示强制删除
4,错误分析:
a) " Already up-to-date”
在git pull的时候当提示“Already up-to-date”, 表示远程分支已经和本地分支合并过了,不用再次输入git pull合并了
-
-
-
b) ! [rejected] master -> master (fetch first)
error: failed to push some refs to 'gitee.com:zfys123/ss.git'报上面这个错误就说明远程的master分支被别人提交了新的文件,从而使远程master分支发生了一些变化, 你需要git push origin master进行合并, 避免将别人的文件给覆盖了
-
-
-
-
c) fatal: refusing to merge unrelated histories
在master分支中当第一次进行git pull合并的时候,报上面这个错误,它的本意是提醒你,这是两个不相关的分支,此时准备合并了,你要注意。
为什么第一次git pull的时候,会提示你,此时合并两个不想关的分支呢, 这是因为在本地分支和远程分支建立联系之后,远程分支还不知道和本地分支有联系,当你同意合并,交流了一次之后,就知道了和本地分支直接的关系了,哈哈
解决方法:
git pull origin master --allow-unrelated-histories //allow表示同意
-
-
-
-
d) fatal: not a valid object name: 'master'
这个报错表示master分支不存在, 当使用git init初始化后,master分支并不存在,需要给master分支也初始化
解决方法:
新建文件aa.txt
输入: git add .
在输入: git commit -m '说明'
就是该当前分支随便添加一点数据,这样就相当于给当前的master分支初始化了
-
-
-
-
-
e) error: you need to resolve your current index first,
aa.txt: needs merge
在切换分支的时候报这个错误,则说明远程分支和本地分支git pull合并的时候发生了一些错误,导致无法切换分支
解决方法:
git reset --merge //终止合并失败的分支
git checkout master //此时就可以切换到master分支了
-
-
-
-
-
f) error: Your local changes to the following files would be overwritten by checkout: aa.txt
当你想要切换到其他分支的时候,会不允许你切换分支,并且会报上面这个错误,意思是你的本地文件aa.txt发生了修改,但是还没有保存到aa.txt所在的分支中,请进行保存
解决方法:
git add .
git commit -m '保存'
5,注意事项:
1,新建文件与删除文件:
a)删除文件
在本地的master分支中删除一个文件,要进行保存,如果没有保存就切换到另一个分支中的话, 当你再次切换会master分支的时候,所删除的文件还是会存在的,因为你并没有将分支中的文件给删除,属于无效操作
解决方法:
首先删除指定文件
然后保存到当前分支:
输入: git add .
在输入: git commit -m '删除'
-
-
-
-
b) 创建文件
在本地的master分支中,创建了一个文件aa.txt,
然后你切换到另一个分支中后,aa.txt文件也会跟随你到另一个分支中,当你没有将aa.txt文件保存到具体分支的话,你在任何分支中都能看到该文件
解决方法:
在master分支中输入: git add .
然后输入: git commit -m '保存’
此时aa.txt文件就保存到了master分支中了
git pull合并造成的冲突:
当别人修改内容并提交到远程主分支中后,你通过git pull将远程分支和本地分支进行合并的时候,会弹出一个编辑窗口,让你解释造成冲突的原因:
解决方案:
- 按键盘左上角"Esc"
- 输入":wq",注意是冒号+wq,按回车键即可
git push远程替换造成的冲突:
1,远程有一个分支AA
2,当你将远程分支AA拉取到本地后,该远程分支AA和本地的分支AA之间还存在联系,你在本地修改完后,可以直接git push提交到远程,将远程分支AA给替换掉了,只要对远程分支进行了git push后, 远程分支将AA和所有的本地分支AA断开联系
3,而此时远程分支AA还有被另一个人拉取到本地后,另一个人在修改后,进行git push,总是报错,显示无法提交,这就说明已经被人提交过了一次,
此时你想要进行提交的话,就必须先进行git pull,如果存在同一个文件内容不一样的话,也会给你标记起来, 然后你就可以进行git push了
总结:当git push报错无法提交的时候,就说明远程和本地分支断开了联系,也就说明已经被另外一个人提交过了一次
你只需要进行git pull从新建立联系,就可以进行提交了
总结:
1,git merge是将本地的两个不同分支进行合并
比如: 在master中输入: git merge AA //就是将分支AA合并到master中
2, git pull是将远程和本地相同的分支进行合并,指定合并的分支必须和当前本地分支是同一个名字
比如: 在分支AA中输入: git pull origin AA //就是将远程的AA分支合并到本地的AA分支中
3, git push是将远程分支给替换成本地分支,就相当于将远程分支给删除,让本地分支上位
比如: 在master中输入: git push origin master //就相当于将远程的master分支删除,然后将本地的master分支上传过去
注意:在git push和git pull的时候,所指定的远程分支名一定要和当前分支名是一样的
4,合并分支的注意事项:
a) 主分支master中有一文件aa.txt, 然后创建它的一个分支AA, 在分支AA中修改文件aa.txt,
修改完之后,在回到主分支中,并通过git merge AA合并分支AA, 此时就相当于将master分支中的aa.txt给删除,然后替换成了分支AA中的aa.txt(这是因为在创建分支的时候,顺带将内容复制过来了,所以合并时它是不算冲突的)
b) 合并造成冲突的原因
首先在主分支master中创建一个文件bb.txt,并输入内容"我是master"保存。
然后在分支AA中也创建一个文件bb.txt, 并输入内容"我是AA"保存,
然后回到master中并合并分支AA
此时bb.txt的内容为:
<<<<<<< HEAD
我是master
=======
我是AA
>>>>>>> AA
这就表示由于在不同分支中创建了相同文件名的文件,导致在合并的时候造成了冲突
当你在切换的时候,就会无法切换并报错:
error: you need to resolve your current index first
aa.txt: needs merge
bb.txt: needs merge //这个表示冲突文件为aa.txt和bb.txt
//旁边也会有显示(master|MERGING), 告诉你合并有问题
解决方法:
git reset --merge //取消合并