git 的 几个注意点

push前必须先 pull
pull前必须commit,不然 会直接 覆盖掉你的代码,commit后,pull 会出现merge提示
hap不能直接clone,跑不起来,只能 init,remote,然后再pull代码,才能跑起来

git回滚操作(都是revert 不是 reset)

	1.git 将修改了 未提交的 文件 恢复到远程仓库(选中文件 idea右上角 revert即可
	或者 git下方的 local changes 有所有的 暂存区的文件)
	(这个 不是 git revert的操作 其实是git reset HEAD filepathname 是指将 暂存区的代码 恢复到远程仓库的样子,
	不是你本地的 最近 一次commit 的样子,是远程库最后一个版本的样子,即使是,也可以通过
	commit的回滚,回滚到你想要的版本)
	也就是说 git revert图标 是 revert字样,都是其实执行的是 git reset HEAD filepathname 命令
	
	2.git 回滚 单个文件(已经 commit了,适用于一次 commit 提交了多个文件,但是提交后发现有一个文件不应该提交,
	                  这时应该怎么办呢?如果把整个 commit 回滚会很麻烦(正确提交的文件也会被回滚),
	                  这时我们就需要回滚一部分文件)
	           这时,只需要在 git控制下方栏,打开这个文件 "History:",revert指定版本即可
	           
	3.git 回滚 整个项目(已经 commit了)
		git下方 log revert指定版本即可

	2和3都是 revert操作,对于2来说,git会将 单个文件的 之前的版本copy一份,然后加上现在
	版本的其他文件 commit一份新版本,然后指向这个版本

git pull代码后 会将 远程仓库的 commit记录 也复制下来,在本地 可以看到 其他人commit的版本

1.合并代码的时候就 2个时候需要考虑,1.本地分支手动合并,2.pull远端自动合并
合并就可能出现代码合并冲突

2.在创建分支的时候,都会将 分支的版本,拷贝过去

3.切换分支,和切换版本,和拉去分支,和合并代码的时候都要 提交代码 commit到 本地库

pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动
合并,如果自动合并失败,还会涉及到手动解决冲突的问题。

push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,
push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!

4.pull = 拉取 分支的 最新版本 到本地 + merge(出现 合并冲突,得手动解决)
fetch = 拉取 分支的 最新版本 但是不merge,可以检查后,在merge,最大可能的 避免 合并冲突(不用)

6.只要涉及,pull,clone,pull,分支合并代码 这几种 都是分支操作,都会涉及到代码合并,push操作合并代码后,会出现新的版本在远端分支,pull操作合并代码解决冲突后提交后,才会在本地库出现新的版本

注意,在idea中 push 和 pull 和 本地分支合并,等只要是涉及分支合并的,在解决合并冲突后,pull 会 自动 commit 新的版本到本地库,只要是合并操作成功后,会自动commit或自动在远端生成新的版本,除了这种情况,还有 git revert也会出现代码冲突,因为git revert也涉及,commit操作

总结,涉及代码冲突的几种情况

1.分支合并
2.pull push
3.git revert(当前版本,和需要回滚 重新 commit的那个版本的 代码冲突,但是这和 分支合并的时候有点不一样,分支合并的时候,最左边的是 当前分支,最右边的是需要合并的分支,中间是最后结果,而git revert的冲突,最左边的是当前版本,最右边的是某个版本的改变,中间的是,你需要回滚的那个版本的结果,所以都不需要做任何解决冲突的操作,直接merge commit即可)

上述可以得知,解决冲突有 2个大类
1.conflict when revert
2.confilct when merge

最后只要是合并时的代码冲突,必须是 分支都更改了同一个位置并 commit了的,如果一个分支改了commit了,但是另一个分支没有改且commit,即使是一个位置,也不会出现 合并冲突

commit和add需要 全部文件吗,不用,只用commit更改的文件,那么新的版本就会在原来的版本的基础上,加上你 commit更改的地方,一般我们也不建议commit所有,所以只要涉及commit的操作,包括 revert,代码合并,等等,都是将有变化的地方commit,

如果在公司,要我们拉取新的分支,那么我们先要 拉取master分支,因为所有分支都是在master分支的基础上修改的,如果直接 在我们当前分支创建分支并拉取新的分支,那么会出现很多代码冲突,如果我们在 master分支的基础上,拉取新的分支,就不会出现代码冲突,并且拉取的版本就是 新分支的版本

所以 clone的时候,一开始就得clone master分支,这样master分支一开始就有了,然后创建你的分支拉取远程对应分支,然后你就在这个分支开发就行,一旦要你拉取其他分支开发,这时你切回到 master分支即可,然后 pull 最新的master分支,然后在这个master分支的基础上,去创建并切换 新的分支,然后拉取新的分支,这样是不会出现代码冲突的,如果一开始没有创建master分支,那这时 2种情况,1.直接在当前分支创建新的分支并拉取远程,这时会出现大量代码冲突,2.在当前分支,吵架呢master分支,在master分支创建新的分支....,也会出现大量冲突,总之,就是如果你要拉取新的分支,那么新创建的本地分支,拉取时一定不要出现代码冲突,并且拉取完后,一定要是和远程的当前版本一样的,所以一定要时刻有一个基础,那么就是master分支

关于拉代码,用idea提供的 branch 默认即可,也有手动解决冲突的步骤

创建新的分支后,pull代码,通常会报错一般,其实就是 git pull origin 远程分支名 本地分支名,idea不知道 远程分支名是啥,你要在 终端 写一段代码,告诉 idea 本地 和 远端 的 分支关联就行

关于 要不要init,不需要,我们只用在一个文件夹下,clone 一个远程仓库下来即可,这个远程仓库里面 有 .git即这个远程仓库init了,init的本质就是将这个文件变成仓库,并且 clone还会 给 本地仓库 和远程 仓库 建立 remote

说到,仓库的概念,init 是在 这个文件夹下,将这个文件夹变成仓库 git remote 是将这个仓库和 远程仓库建立联系,这样才能 拉代码和推代码(简单来说,要有本地仓库了,才能进行远程的 推拉操作,),所以必须有 remote才行,不仅是给远程地址起别名而且是,建立联系后才能pull和push git clone 是将 远程的仓库 直接拷贝一份 在 这个文件夹下,就是说这个文件夹里面 有一个仓库(要成为一个仓库,里面就得有.git文件,随便还 remote建立了联系) 所以,我们一般不用 git init 我们直接 clone 一份仓库到一个文件夹下,这个文件夹就没有用了,有用的是这个仓库,然后我们在这个仓库的文件夹下打开git 进行pull 和 push等操作 要有 仓库的概念,一切的操作 都是 在 一个本地仓库 和 一个远程仓库的 基础上进行的

工作区(暂存区),这里是我们写代码的地方,可以说这与git的分支(指针),本地库和远程库没有什么关系,但是是有一点,在这几种情况下,分支合并,拉代码,推代码(都叫分支合并吧),版本回退等情况,都会更新工作区的内容的,但是真正我们的操作,都是git的本质,即 本地库远程库,以及head指针和分支指针

远程仓库 和 本地仓库 只涉及 pull 和 push ,即分支合并,以及版本兼容性的问题,分支合并比较好理解,版本问题就是说,以push为例,本地分支指向版本 一定 要比 远程分支指向的版本高,不然就得 强力push ,那么在 idea的 终端 输入 一段代码 表示强力 push 什么叫版本高,即 本地版本,没有 push过,那么远程仓库中就没有这个版本,这就叫高

7.关于 ssh 和 https ,简单来说,你想要 与远端 建立联系 remote,并克隆,pull,push代码, 本地 与 远端仓库的操作,首先你得有那个远端 仓库的 服务器的 账号,ssh,和https就是 一个 登入 远端仓库所在 服务器的 操作,登入后,才能 操作本地 与 远端
ssh , 只是提前设置 了 这个网站的 密钥,来代替,用户名和密码登入,用用户名和密码 可以在 window上 设置 一个 凭证,即 网站 + 此网站的 username 和 password ,这样你在 git操作的时候,git就会选择 不同的 方式 去 登入

使用SSH公钥可以让你在你的电脑和码云通讯的时候使用安全连接(git的remote要使用SSH地址)

首先得清楚,在本地 初始化git,以及与 远端建立的连接的目的,就是把本地所有分支,和远端所有分支,加入 git管理,简单来说 就是远端 和 本地的 仓库和分支 全部在git的管理下,也就是说 远端和本地分支 本质 都是 git管理下的分支,没有什么区别,也就是合并,可以自己合并 本地+本地,本地+远端,远端管理员 可以合并 远端+远端,远端+推送的

所以合并代码(手动合并,pull code,push code的合并)只用注意:什么是合并,合并的规则,什么时候或者为什么会出现冲突,以及怎么解决代码冲突

git合并原则

git merge命令作用是将某个分支的内容合并到另一个分支,在合并时有可能会发生冲突,这个时候需要手动解决冲突之后进行提交,才能完成合并

本文主要讲合并原则,以及什么时候会发生冲突

场景描述

假设现在有master分支和dev分支,准备在master分支上执行git merge dev,将dev分支上的内容合并到master分支上

合并原则

并集。意思就是master上没有而dev上有的文件会合并过来,master上有而dev上没有的文件会保留下来。

同时,取并集这个概念也不是特别准确,总之 如果 一个分支修改,另一个分支没有修改,那么另一个分支无条件 合并修改了的分支,不会出现任何代码冲突

合并冲突

目前实验结果为:

假设有master和branch1,用master合并branch1时(在master分支中执行git merge branch1):

1、在同一个地方,master做了修改,branch1没有修改,则合并后是修改了的

2、在同一个地方,master没有修改,branch1修改了,则合并和还是修改了的

也就是说,在同一个地方,一个分支做了修改,另一个分支没有做修改,则合并后的结果总是修改了的

结论:在同一个地方,两条分支都做了修改,则产生冲突。注意的是,这里说的同一个地方,并不一定是绝对一模一样的地方,而是在一个很小的范围内,都算同一个地方,比如:

master修改了第一行,而branch1修改的是第二行,这也算是同一个地方,git会认为这是在同一个地方两个分支都做了修改,因而会产生冲突。这个应该是跟文件系统的block相关了,猜测是同一个block都算是同一个地方。

简单来说,代码冲突 是指 合并时,两个分支的 一个地方 这一个地方的概念 不太确定,git自有自己的规则,都做了修改,那么 git就不知道用哪个,因为git是取并集,相同的地方,同时 做了修改,那么 git就不知道用哪个的,就出现了冲突,重点就是 同一个地方的理解 以及 都做了修改 的理解

好的操作流程是,pull代码-解决冲突(可能没有,因为第一次没有修改)-写代码- pull代码-解决冲突- push代码 - pull代码...............
在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值