Git分支使用,代码推送拉取与合并冲突

第一章、git分支操作

1.1)分支的创建和切换

1.1.1)分支的创建

在本地建立我自己的分支(取名develop)才能提交到远程仓库上develop的分支

#第一种方式:创建develop分支
git checkout -b  develop
#第二种方式:创建develop分支
git branch develop

使用这个命令将本地分支推送到origin,成为远程分支

git push origin develop:develop

1.1.1)分支的切换

使用下面这个命令来查看当前分支。

git branch

如图:
在这里插入图片描述
使用下面这个命令来切换分支。

 git checkout develop

如图:
在这里插入图片描述

1.2)本地切换分支之前有未提交的更改

1.2.1)切换之前的master分支下文件内容

执行命令 切换到master分支

git checkout master

此时的master分支下的文件内容如下:
在这里插入图片描述

1.2.2)切换到develop分支后修改文件

执行命令 切换到develop分支

git checkout develop

对文件内容进行以下修改:修改后内容如下:
这时候不对develop分支做提交,直接切回master
在这里插入图片描述

1.2.3)再切回master分支出现提示:

***如下: error: Your local changes to the following files would be overwritten by checkout:
        fileMergeTest.txt
Please commit your changes or stash them before you switch branches.

您对以下文件的本地更改将被签出覆盖:
fileMergeTest.txt
请在切换分支之前提交(commit),或者缓存(stash )。

1.3)解决方式:不merge

1.3.1)方式1:commit提交修改

先在develop分支修改本地文件内容,如图:
在这里插入图片描述
切换到master分支时提示:
在这里插入图片描述
使用commit,提交保存到本地仓库再切换分支:

git add filename
git commit -m "message"

如图执行:
在这里插入图片描述
提交后,本地文件就被修改了,这时候切换成功了
在这里插入图片描述
git checkout develop切换回develop分支会发现,文件内容是修改保存的。
在这里插入图片描述

想要还原这次commit提交的话可以:
使用git log 查看提交的历史记录 找到,
在这里插入图片描述

再使用下面命令恢复本次提交的修改

git revert <commit-id>
#也就是
git revert fceb33de10e82ed956fe68aa25c0c567bfdace47

出现下面的界面:Git会打开一个文本编辑器,让您输入撤销提交的相关信息。可以按i然后直接按下Esc键,输入:wq,然后按下Enter键。默认使用当前信息。
在这里插入图片描述

1.3.2)方式2:stash 暂存

先在本地develop分支下修改文件内容
在这里插入图片描述
切换到master分支时提示:
在这里插入图片描述
可以使用git stash #封存修改切换到master以后再切回来,
在这里插入图片描述
发现文件内容怎么少了一段
在这里插入图片描述
原来是要把封存的修改用git stash pop命令取出来

git stash pop #把封存的还原

封存的修改就还原了
在这里插入图片描述

1.3.3)方式3;放弃修改

不推荐这样做,改完了又放弃,这不是傻嘛。

git clean -n         //这个是清除文件预览
git clean -f fileName        //强制清除文件

执行后效果如下:

86130@Bms MINGW64 /f/Git/mergetest (develop)
git clean -n
Would rempve fileMergeTest.txt.bak
86130@Bms MINGW64 /f/Git/mergetest (develop)
git clean -f fileMergeTest.txt.bak
Removing fileMergeTest.txt.bak

1.4)解决方式:commit提交后直接merge

1.4.1)查看develop分支下的内容

执行命令 切换到develop分支

git checkout develop

发现内容如下:
在这里插入图片描述

1.4.2)查看master分支下的内容

执行命令 切换到master分支

git checkout master

master分支下的文件内容如下:
在这里插入图片描述

1.4.3)合并develop分支到master分支

执行下面的命令先切到master

git checkout master

合并develop分支到当前的master分支

git merge develop

这是在master分支下查看文件内容,发现已经和develop分支同步了
在这里插入图片描述

第二章、推送、拉取与合并

2.1)推送与比较差异

2.1.1)提交到暂存区

当我本地有了改动,用命令查看改动

git diff 文件名<file>

如图,绿色是改动新增,红色是删除的地方
在这里插入图片描述

把有改动的文件(modified状态)添加到暂存区,准备进行提交。

`git add .`命令用于将所有修改过的文件添加到暂存区。
这个命令会将当前目录及其所有子目录中的所有修改过的文件都添加到暂存区,以便后续提交这些更改。

再使用status命令查看是否添加成功(变绿)

git status
Git命令行中,AM通常代表以下含义:
A:表示"Added",表示文件已经被添加到暂存区(Staging Area)。
M:表示"Modified",表示文件已经被修改过。

或者绿色的是在暂存区,红色的是已经被修改了

如果某些文件显示为红色,表示这些文件已经被修改但尚未添加到暂存区。需要重新运行git add命令将这些修改过的文件添加到暂存区,以便将它们包含在下一次提交中。
如图:
在这里插入图片描述

2.1.2)把文件从add到暂存区的文件退下来

如果使用add的时候添加错了,可以使用下面这个操作把文件从add到暂存区的文件退下来

git restore --staged 文件名<file>

#再使用status命令查看是否退回成功(变红)
git status

如图;
在这里插入图片描述

确认无误后,提交暂存区的文件到本地仓库,-m’xxx’是指添加提交信息。

git commit -m 'bms dev first commit'

如图
在这里插入图片描述

查看日志信息是否commit提交成功:包括提交者、提交时间、提交信息等。

git log

如图:
在这里插入图片描述

2.1.3)推送到不同远程仓库分支

将本地仓库的改动推送到远程仓库develop分支。这里的develop相当于在远程仓库创建了develop分支,如果分支已经存在就不会创建了(有可能是和别人共用分支)


#选择推送到远程仓库的develop分支
git push origin develop

#选择推送到远程仓库的master分支
git push origin master

在github上,如果没有代码冲突,就将自己的分支合并到共用的分支

在github上直接用UI可以合并

2.1.4)推送完后比较本地分支和远程分支:*

使用git fetch命令来获取远程仓库的最新信息:这里会获得所有分支的更新。即使只想比较develop分支,git fetch也会更新所有分支(develop,master等等)的信息,而不仅限于develop分支。

git fetch

确认本地develop分支和远程origin/develop分支存在并同步:

git branch -a

使用git diff来比较本地develop分支和远程develop分支之间的差异(查看是否一致)如果在运行git diff develop origin/develop命令时没有返回任何信息,代表本地develop分支和远程origin/develop分支之间没有差异。

git diff develop origin/develop

也可以在develop分支上使用git diff来比较本地develop分支和本地master分支

git diff master develop

2.2)本地合并

2.2.1)git merge命令介绍

git merge 用于本地分支的合并。将一个本地分支的更改合并到另一个本地分支时,保留详细的合并信息。

例如,假设有一个 develop分支和一个 master 分支,在 develop分支上开发了新的功能,然后想要将这些更改合并到 master 分支中。您可以切换到 master 分支,然后运行 git merge develop命令来实现这一目的。

2.2.2)模拟本地develop与本地master冲突

本地不同分支的文件有差异
在Git中,合并分支可以在本地进行,也可以在远程仓库进行。因为一般不会去远程仓库合并。我们这里只讨论本地分支合并。
使用git merge命令合并本地分支时,因为各种原因造成了不同分支的相同文件有差异合并时就会导致代码冲突。

场景1:合并本地分支
从本地master分支拉出了develop分支,在develop分支上开发,在这期间,各种原因,master分支发生了变化。等你想把develop分支合并到master分支,提示代码冲突。

master分支修改第五行:修改文件内容后执行命令

git add .
git commit -m 'messag'

在这里插入图片描述
切换到develop分支,依然修改第五行:修改文件内容后执行命令

git add .
git commit -m 'messag'

在这里插入图片描述
切回master分支,合并develop分支

git checkout master
git merge develop

提示合并失败,内容冲突
在这里插入图片描述

2.2.3)解决冲突

打开文件,发现本地文件冲突位置
在这里插入图片描述
手动编辑这个文件,解决冲突后提交
在这里插入图片描述

2.3)远程拉取与合并

2.3.1)git pull 与git fetch的区别

git fetch:该命令会从远程仓库中获取最新的提交历史和文件更改,但不会自动合并或修改你的本地工作副本。它只会将远程分支的更新内容下载到本地,使你能够查看远程分支的最新状态。

git pull:该命令实际上包含了git fetch和git merge两个操作。它会先从远程仓库获取最新的提交历史和文件更改(相当于git fetch),然后自动将远程分支的更新内容合并到你的本地分支上(相当于git merge)。因此,git pull会直接将远程仓库的更改内容复制到你的工作目录中,并尝试自动合并这些更改。

代码冲突原因:
指在合并(merge)分支或拉取(pull命令包含了merge)远程代码时,远程文件和本地文件的相同位置做出了不同更改。当Git检测到时,会标记出冲突的部分,通常需要开发人员手动编辑代码,选择保留和合并哪些代码,最终手动解决冲突并提交合并后的代码。

2.3.2)本地仓库和git远程仓库差异原因

场景2:pull拉取代码
开发者A和开发者B都从远程仓库克隆了代码到本地。A开发者修改了一个代码文件后提交代码到git远程仓库成功,B开发者在本地修改了同一个代码文件的相同部分,这时本地仓库和git远程仓库的文件出现了差异,拉取会提示代码冲突。

2.3.3)模拟远程与本地冲突

开发者A修改了文件fileMergeTest.txt的第5行,然后将更改推送到远程仓库。如图:
在这里插入图片描述
同时,开发者B在本地也修改了文件fileMergeTest.txt的第5行如图:
在这里插入图片描述

开发者B尝试将远程仓库pull到本地。由于开发者A和开发者B修改了同一个文件的相同部分,开发者B在拉取时会遇到代码冲突。并提示自动合并失败,需要修复冲突,并提交最新修改后的版本
在这里插入图片描述
运行git status命令查看哪些文档文件存在冲突。Git会列出冲突的文件,标记为"both modified"。

开发者B在打开冲突的fileMergeTest.txt文件,会看到类似以下的标记:

<<<<<<< HEAD
// 开发者B的更改
=======
// 开发者A的更改
>>>>>>> 

如图:
在这里插入图片描述

2.3.4)手动编辑文件,解决冲突

①打开冲突文件,手动编辑以解决冲突:
查看冲突标记:在文件中查找冲突标记,通常是"<<<<<<<“,”=======",和 “>>>>>>>”, 这些标记将冲突的代码块分隔开来。

开发者B需要手动编辑fileMergeTest.txt文件,决定保留哪些更改,删除哪些更改,直到解决所有冲突。 我选择保留本地修改:
在这里插入图片描述

解决冲突后,开发者B使用git add fileMergeTest.txt命令提交到暂存区,使用git commit命令提交更改,然后使用git push命令将更改推送到远程仓库。
在这里插入图片描述
查看远程仓库,已经同步更新了
在这里插入图片描述
如果本地修改量很大:
先用git stash封存修改,再正常git pull了,git pull后,执行git stash pop将之前本地做的修改恢复到当前工作区。这个时候就会报代码冲突了,
打开冲突文件,手动编辑解决后,commit继续push

2.4)Git操作实例

2.4.1)develp分支只有自己在用,master是共同使用

前置步骤;推送至远程develp

本地develop分支开发完毕(修改代码)后先提交

git add .
git commit -m'messsage'
git push origin develop

推送完后比较本地develop分支和远程develop分支:
使用git fetch命令来获取远程仓库的最新信息:这里会获得所有分支的更新。即使只想比较develop分支,git fetch也会更新所有分支(develop,master等等)的信息,而不仅限于develop分支。

git fetch

使用git diff来比较本地develop分支和远程develop分支之间的差异(查看是否一致)。如果在运行git diff develop origin/develop命令时没有返回任何信息,代表本地develop分支和远程origin/develop分支之间没有差异。

git diff develop origin/develop
前置步骤:合并本地

切换到本地的 master 分支:

git checkout master

使用以下命令将本地的 develop 分支合并到 master 分支

git merge develop

Git会提示您输入合并的信息。可以按照以下步骤操作:

按下键盘上的i键,进入编辑模式,此时会显示一个光标。
输入您想要的合并信息,描述本次合并的目的和内容。
按下键盘上的Esc键,退出编辑模式。
输入 ’冒号‘ :wq,表示保存并退出编辑。
按下Enter键,完成合并操作。

拉取远程master并合并

退出后,这时候idea也处于master分支了,用idea将 master 分支最新代码拉下来:Idea使用git教程链接
在这里插入图片描述

①如果提示冲突了,就用idea merge一下,点击merge选项
在这里插入图片描述
②跳出如下页面,手动选择保存哪个代码
左边是本地代码,右边是远程仓库版本,中间代表要保留的版本
选择>>代表保存,选择x代表不保存
在这里插入图片描述

使用IDEA将本地分支master,合并到本地分支develop

命令行切换分支到develop分支

git checkout develop

提示please commit changes or stash them before you switch branches.意思是让切分支前commit一下。

git add .
git commit -m'切分支前的commit'
--commit后再次尝试切换分支。成功
git checkout develop

这时候在IDEA的界面中,也是develop分支了。打开Git工具窗口(通常在底部右下角会显示分支)。并选择master分支,选择Merge into Current(合并到当前分支)选项。
在这里插入图片描述

IDEA会执行合并操作,并将本地master分支的更改合并到本地develop分支中。在控制台可以查看,本次合并更新了哪些文件
在这里插入图片描述

再次推送至远程develop

这时候可以看一下本地develop哪些文件与远程develop不同

git diff develop origin/develop

将最新代码重新推送至远程develop

git add .
git commit -m 'message'
git push origin develop

2.4.2)develp是共同使用,master没人使用

先#从develop分支拉取
git fetch origin develop

切换到本地的 master 分支:

git checkout master

使用以下命令将本地的 develop 分支合并到 master 分支

git merge origin/develop

将本地合并后的代码push到远程的master
一般无法直接和远程合并,而是发起合并请求,会有项目经理在远程合并

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值