Git推送代码冲突与Git分支管理
文章目录
- 两种Git冲突
- (1) 多人修改的代码不是同一个地方的冲突
- (2) 多人修改的代码是同一个地方的冲突
- 分支管理
- 本地分支管理
- 创建本地分支
- 两个push方法
- 删除本地分支
- 远程分支管理
两种Git冲突
Git冲突
(1) 多人修改的代码不是同一个地方的冲突
还是原来那段代码
#include<iostream>
using namespace std;void sort(int* arr, int size)
{int tmp = 0;for(int i = 0; i < size-1; i++){for(int j = 0; j < size-1-i; j++){if(arr[j] > arr[j+1]){tmp = arr[j];arr[j] = arr[i];arr[i] = tmp;}}}
}int main()
{int arr[] = {12, 10, 65, 74, 34, 2, 8, 26, 31, 17};int size = sizeof(arr) / sizeof(arr[0]);sort(arr, size);return 0;
}
首先先保证手上的都是最新的代码,所以要先pull一下
然后我们分别在这两个地方添加改动
跟之前一样的流程
git add、commit、push
我们先提交其中任意一个,另一个先保持commit到本地仓库的状态
我这里先提交的Linux端的代码
然后我们提交PC端的代码时就会发现
错误:未能将一些引用推送到 'github.com:JOLLY-Z/git_test.git' 更新被拒绝,因为远程仓库包含您本地没有的工作。这通常是由另一个仓库推送到相同的引用导致的。
这时只需要按照提示先进行 git pull 来更新下本地代码即可
这时由于PC端和Linux端修改的不是同一个地方,所以Git会自动为我们merge(合并)代码
此时我们cat一下main
可以看到Linux端的代码被merge到我们这里,此时就可以直接提交了
(2) 多人修改的代码是同一个地方的冲突
如果大家修改的是同一个地方那怎么办,这下怎么通过pull来合并代码??
同样的,修改代码前先保证手上的代码是最新的,先pull一下
然后我这里修改下readme
然后一样的add、commit、 push
此时再推送PC端的修改肯定会有冲突
按照提示进行 git pull 我们也会看到
自动合并失败,修理冲突然后提交
那我们看看readme里现在是怎么样
看来git为我们区别出来了两个文档的差异
上面那个是我们的,下面那个通过commit id可以知道是上一次Linux的提交
这时就需要自己手动修改,再重新提交
然后可以重新提交
现在去github也能看到新提交结果
分支管理
在团队开发中,不同成员可能需要同时处理不同的功能模块、修复 bug 或进行实验性开发。如果所有开发都在主分支上进行,会导致代码冲突频繁发生,严重影响开发进度,
并且由于分支的隔离性,每个分支相当于一个独立的 “开发环境”,团队成员可以在自己的分支上独立编写、测试代码,而不会影响其他分支的稳定性
本地分支管理
创建本地分支
git branch -vv 用于查看本地分支详细信息的命令
可以看到当前就只有一个分支,并且处于上次的修改readme步骤
然后我们可以通过两个命令来创建新分支并直接切换到新分支
git switch -c 这里写新分支名字
git checkout -b 这里写新分支名字
然后再使用git branch 就能看到新分支
通过git branch -vv 查看分支详情我们也能看到基于main创建的两个分支
并且能看到main分支追踪的是远程的main(origin / main)
由于新分支并没有追踪哪条分支,所以直接pull是不成功的,需要指定拉取远程仓库的哪条分支
此时我们修改下readme文件,并更新到sortdev分支下
然后在sortdev分支下add和commit一下
两个push方法
(一)合并到main分支,通过main分支提交
首先回到main分支,然后通过 git merge sortdev 将sortdev上的分支合并到main分支
当合并过来以后,就相当于直接合并到main仓库了里了,就不需要再来走一遍add和commit
此时就能再通过 git push origin main:main 来提交修改
(二)直接跟之前一样使用 git push origin sortdev:main
此时再切换回main分支就能看到当前main分支落后于远程仓库
通过git pull 可以更新
删除本地分支
main 分支之前合并过sotrdev分支,则可以通过这条命令
git branch -d sortdev
但是如果要删除的分支被修改过,并且没有合并到main分支这样删除会报错
开心@Jolly-Z MINGW64 /d/Jolly/Git/git_test (main)
$ git branch -d sortdev
error: The branch 'sortdev' is not fully merged.
If you are sure you want to delete it, run 'git branch -D sortdev'.
如果不想合并到main分支想直接删除需要把** -d 改成 -D**
开心@Jolly-Z MINGW64 /d/Jolly/Git/git_test (main)
$ git branch -D sortdev
Deleted branch sortdev (was e41aa89).
注意: 不能在sortdev分支删除sortdev分支,要切换到main去删除sortdev分支
远程分支管理
首先在GitHub创建一个远程分支
当我们在github新建一个新分支以后,要在git客户端执行这条命令来更新客户端
git fetch
然后我们在本地也创建一个一样的分支,此时又两种方法时本地分支指向远程分支
-
git checkout -b 本地分支名
git branch -u 本地分支名
然后通过 git branch -vv 可以看到本地的Version_2已经追踪了远程的Version_2
-
git checkout -b 本地分支 要追踪的远程分支
然后我们修改下readme文件
再把之前git add 、git commit 连招再打一遍
于是我们就能在Github的不同分支上看到不一样的效果