Git 分支合并代码

article/2025/9/28 21:41:14

Git 分为哪几个区:
https://blog.csdn.net/qq_36672905/article/details/82776283
在这里插入图片描述
在这里插入图片描述
Git的区域分为 工作区、暂存区、本地仓库区

工作区(work directory):一般就是我们项目的根目录。

本地仓库(repository):我们在为项目添加本地库之后,会在工作区生成一个如下图所示的隐藏目录“.git”,.git目录即为当前工作区的本地版本库

暂存区(stage):版本库中设立一个暂存区(Stage or Index),作为用来直接跟工作区的文件进行交互,工作区文件的提交或者回滚首选都是通过暂存区,而版本库中除了暂存区之外,文件的提交的最终存储位置是分支(Branch),在创建版本库的时候默认都会有一个主分支(Master)

1.首先 看目前位于哪个分支上 (前面带*号的为当前分支)

git branch

2.创建本地分支 (若没有dev分支会创建并切换到dev2上)

git checkout -b dev

3.在分支dev上 进行改动,改动完成 (commit之后的commitId需要保存)

git add .
git commit -m "提交信息"

4.回到master分支

git checkout master

5.更新代码

git pull origin master

7.将dev的更新合并过来(commitId是dev在commit的时候的)

git cherry-pick commitId

当cherry-pick时,没有成功自动提交,这说明存在冲突


$ git cherry-pick 2555c6e
error: could not apply 2555c6e... [Description]:branch2 commit 2
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

8.有冲突手动解决然后 add,可以不commit,直接调用 add和continue 之后继续(等于再次commit)

git add .
git cherry-pick --continue

https://blog.csdn.net/fightfightfight/article/details/81039050

9.然后可以查看当前提交的信息(查看n条就写-n)

git log -3

最后就可以push了

git push -u origin master
或者
git push origin HEAD:refs/for/master

问题一
此时已经push完成,但是别review代码时觉得你提交的commit 信息不合适,需要修改 ,amend之后要再次push ,这样就提交了,但是此次更改的是最近一次commit的信息

git commit --amend
git push origin HEAD:refs/for/master

问题二
现实是可能有好几个分支 cherry-pick ,这时候的操作

1、比如时间点A拉取了最新的代码 ,然后创建一个本地分支dev,做了改动 然后git add .git commit -m " dev commit "

2.然后回到master 分支 git checkout master,这是后发现远程代码更新了,然后就要git pull origin master 然后呢,这时候你有另一个功能要改,此时就要再创建一个dev1分支,然后在dev1上改动,改完之后 git add .git commit就可以回到master 上
3.再次回到master 分支,然后就可以 将dev 和dev1 的改动合并过来了

git cherry-pick 57f6eac(dev 的commitId)

如果有冲突就解决冲突,然后dev1 同理

    git add .git cherry-pick --continue

4.都cherry-pick完成之后,git log -3看最上面的两次commit,因为每次的cherry-pick都相当于一次commit ,从log的信息可以看出,master分支上的这两次commit的信息 (commitId,和注释)就是dev和dev1分支上的commitId和注释。

5.如果想提交的时候不想有两次的commit记录可以把这两次的commit合并
(commitId是你要合并的两个commit后所形成的一个commitId需要在哪一个的commitId之后,就是要定位在哪个位置

 git rebase -i commitId   

https://blog.csdn.net/u013276277/article/details/82470177
然后点击i进入到vi 的编辑模式,然后要合并几条commit 就在第一条的commitId前写pick 以后的几条前都写s(squash的简写),这样这几条就会被合并了,保存的步骤 键盘 insert esc 然后输入冒号 :wq 这是退出保存

pick 的意思是要会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit

在这里插入图片描述
保存之后,还是会进入一个可以vi 的编辑界面合并成新的commit的备注信息,这样就完成了。

=============================================================

另外一个问题,在上面的步骤2 比如,从dev回到master分支之后,pull下来更新的代码,然后创建dev1,打算去完成某一功能,但是需要dev中已经添加的一些资源,所以 我就把dev 的commit cherry-pick到了dev1上,然后继续完成功能,完成之后add commit

然后回到了master分支,打算合并dev1分支的内容,当时想的是dev1已经合并了dev 的内容所以只需要合并dev1的commit就行了
这样其实也没错,但是在master上cherry-pick 完dev1之后发现dev的内容并没有合并过来?
为什么呢,因为我只是cherry-pick的dev1的commit ,并没有将dev1 cherry-pick dev的那次commit(签名说过cherry-pick也相当于一次commit) 拿过来,所以就是这样的 在dev1上相当于有两次commit,但是我拿了最后那一次的commitId,所以是需要再cherry-pick 分支dev的commitId ,这样代码才全部合并完成

如图所示,c1才是对应的dev分支的内容,c2是dev1分支的内容,虽然在dev1上有dev代码的内容,但是在将dev1合并到master上去的时候,Git不是根据内容来合并的,是根据内容变化的节点来的,所以合并要合并两个节点的内容
在这里插入图片描述

参考文章:https://blog.csdn.net/u013276277/article/details/82470177
https://blog.csdn.net/fightfightfight/article/details/81039050

===========================================================

如果提交错了
版本回退 回退到哪个版本

git reset --hard  commitId

有两种方法 :reset 和revert
https://blog.csdn.net/yxlshk/article/details/79944535


http://chatgpt.dhexx.cn/article/DEYXecYn.shtml

相关文章

git将一个分支的提交合并到另一个分支

git将一个分支的提交合并到另一个分支 Git合并指定文件到另一个分支。 经常被问到如何从一个分支合并特定的文件到另一个分支。其实&#xff0c;只合并你需要的那些commits&#xff0c;不需要的commits就不合并进去了。 1. 合并某个分支上的单个commit 首先&#xff0c;用g…

Git分支合并到另外一个分支

注意&#xff1a;不能在分支节点再新建分支节点&#xff0c;及时新建了成功了&#xff0c;分支节点也是基于master去建立的。&#xff08;已验证&#xff09; 下面来提一个需求: 需要新建两个分支&#xff0c;一个是test1另外一个是test2&#xff0c;首先在test1上开发&#…

git查看分支、创建分支、合并分支

一、查看的git命令如下&#xff1a; git branch 列出本地已经存在的分支&#xff0c;并且当前分支会用*标记 git branch -r 查看远程版本库的分支列表 git branch -a 查看所有分支列表&#xff08;包括本地和远程&#xff0c;remotes/开头的表示远程分支&#xff09; git bran…

git合并分支总结(一看就懂哟)

1.主分支&#xff1a;在本地先拉取最新代码&#xff0c;提交&#xff08;commit&#xff09;到本地&#xff0c;推送&#xff08;push&#xff09;到云端 --下图是idea中提交到本地&#xff0c;未推送到云端的提示&#xff1a; 2.小分支&#xff1a;在本地先拉取最新代码&…

git如何把其他分支的合并到主分支上,主分支的合并到其他分支上

master&#xff1a;主分支 other&#xff1a;其他分支 首先查看分支 git branch如果分支在主分支上忽略此步&#xff0c;如果不在切换分支 git checkout other在other分支上拉取代码 git pull最重要的一步&#xff0c;拉完代码后&#xff0c;在切换到master分支上&#xff…

git merge合并分支

一、本文是从master分支拉出的two&#xff0c;然后合并回master 1、切换到master分支&#xff1a;git checkout master 2、创建并切换到two分支&#xff1a;git checkout -b two 3、将two分支push到远程仓库&#xff08;与本地仓库同步&#xff09;&#xff1a;git push ori…

git分支的合并

原文&#xff1a; http://gitbook.liuhui998.com/3_3.html http://gitbook.liuhui998.com/5_3.html 一、如何分支的合并 在git中&#xff0c;可以使用 git merge 和 git rebase 两个命令来进行分支的合并。 git merge 和 git rebase 在大体上都差不多&#xff0c;下文主要以g…

Git提交本地代码至分支及合并分支到总分支

Git提交本地代码至分支 前言一、查看分支二、本地新建分支三、切换到新分支四、创建并切换分支五、将新分支推送到gitlab六、删除分支七、git 提交本地代码至新分支八、将分支代码合并到总分支 前言 git版本控制工具和svn差不多&#xff0c;可选择的远程库有github、gitlab、g…

git怎么合并两个分支

git怎么合并分支代码 1.git 命令 注意: 第一步你得把当前分支合到远程分支去才能有下面的操作 另外我是将develop分支代码合并到release分支去1.推完代码到远程仓库查看本地分支(如果推错分支代码那么请将分支切到刚刚推送上去代码的分支在来进行下面的操作) git branch2.切…

【剑指offer】【java】变态跳台阶

题目 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 1.这里计算的是跳法数 而不是跳的次数 2.用递归解决 代码 public class Solution {public int JumpFloorII(int target) {if (target…

接了个变态需求:生成 Excel + PDF 导出,用 Java 怎么实现?

一、序言 Excel、PDF的导出、导入是我们工作中经常遇到的一个问题&#xff0c;刚好今天公司业务遇到了这个问题&#xff0c;顺便记个笔记以防下次遇到相同的问题而束手无策。 公司有这么两个需求&#xff1a; 需求一、给了一个表单&#xff0c;让把查出来的数据组装到表单中…

Java面试题目和答案

Java面向对象有哪些特征&#xff0c;如何应用 ​ 面向对象编程是利用类和对象编程的一种思想。万物可归类&#xff0c;类是对于世界事物的高度抽象 &#xff0c;不同的事物之间有不同的关系 &#xff0c;一个类自身与外界的封装关系&#xff0c;一个父类和子类的继承关系&…

浅析Java多态

Java多态 今天来谈谈Java中的多态&#xff0c;作为面向对象的一大特性&#xff0c;它的重要性不必多说&#xff0c;相比其他两特性&#xff08;继承、封装&#xff09;从字面上看就有点不易读懂&#xff0c;多种态度还是有多变态&#xff1f; 官解 官方解释&#xff1a; 多态…

java连连看小游戏

目录 运行界面图 代码如下&#xff08;示例&#xff09;&#xff1a; 2.运行演示 这是一个用java编写的小游戏&#xff0c;连连看是一种消除类益智游戏&#xff0c;核心要求是在规定的时间内&#xff0c;消除游戏界面中选中的两张相同的图案&#xff0c;直至完全消除所有图案…

南阳ACM 题目811:变态最大值 Java版

变态最大值 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB 难度&#xff1a;1 描述 Yougth讲课的时候考察了一下求三个数最大值这个问题&#xff0c;没想到大家掌握的这么烂&#xff0c;幸好在他的帮助下大家算是解决了这个问题&#xff0c;但是问题又来了。…

线程池的好处

线程池的好处: 一.降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。&#xff08;当线程run方法使用完毕后&#xff0c;下一个线程不用再次创建&#xff0c;直接利用上一个线程&#xff09; 二.提高响应速度。当任务到达时&#xff0c;任务可以不需要等到…

详解线程池的作用及Java中如何使用线程池

服务端应用程序&#xff08;如数据库和 Web 服务器&#xff09;需要处理来自客户端的高并发、耗时较短的请求任务&#xff0c;所以频繁的创建处理这些请求的所需要的线程就是一个非常消耗资源的操作。常规的方法是针对一个新的请求创建一个新线程&#xff0c;虽然这种方法似乎易…

线程池作用及Executors方法讲解

线程池的作用: 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况&#xff0c;可以自动或手动设置线程数量&#xff0c;达到运行的最佳效果&#xff1b;少了浪费了系统资源&#xff0c;多了造成系统拥挤效率不高。用线程池控制线程数量&#xff0c;其他线程排…

Qt工作笔记-线程池作用之一:限制系统中执行线程的数量

一、线程池的作用&#xff1a; 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况&#xff0c;可以自动或手动设置线程数量&#xff0c;达到运行的最佳效果&#xff1b;少了浪费了系统资源&#xff0c;多了造成系统拥挤效率不高。用线程池控制线程数量&#xff0c;…

Android:Android线程和线程池的作用

文章目录 前言一、线程池概念好处线程池的创建参数含义工作机制RejectedExecutionHandler&#xff08;饱和策略&#xff09; 二、Android线程形态1.AsyncTask特点作用缺点生命周期注意事项 具体使用源码分析小结 2.HandlerThread特点作用具体使用 3.IntentService源码分析 总结…