git 把代码合并到他人分支方法

前言

之前用git一直都使用Sourcetree工具,并且都是独立维护一个项目,所以很少有代码冲突或者需要切分支,合并分支的操作。最近换了一家公司,前端开发比较多,项目也不是单独固定维护,那git 知识的短板就嘎嘎的暴露出来,这两次操作都拉了同事帮忙。 最近学习的记录下。

最近使用合并代码的 git命令 主要有以下2种

git cherry-pick

1. 情况
复制代码
主要适用于你只需要部分代码变动或者某几个提交
2. 基本用法

git cherry-pick 命令就是将指定的提交内容用于其他分支上面

git cherry-pick "commitHash"

commitHash 指的是当前分支的提交记录,每个哈希值会不一样,可以通过下面命令看到提交内容的哈希值

git log -oneline

举个例子,代码仓库有masterfeature两个分支。

css 复制代码
    a - b - c - d   Master
         \
           e - f - g Feature

现在将提交f应用到master分支。

ruby 复制代码
# 切换到 master 分支
$ git checkout master

# Cherry pick 操作
$ git cherry-pick f

上面的操作完成以后,代码库就变成了下面的样子。

css 复制代码
a - b - c - d - f   Master
         \
           e - f - g Feature

从上面可以看到,master分支的末尾增加了一个提交f

git cherry-pick命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。

ruby 复制代码
$ git cherry-pick feature

上面代码表示将feature分支的最近一次提交,转移到当前分支。

3. 转移多个提交

Cherry pick 支持一次转移多个提交。

xml 复制代码
git cherry-pick <HashA> <HashB>

上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。

如果想要转移一系列的连续提交,可以使用下面的简便语法。

css 复制代码
git cherry-pick A..B 

上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。 注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。

css 复制代码
$ git cherry-pick A^..B 
4. 代码冲突

如果操作过程中发生代码冲突,Cherry pick 会停下来,让用户决定如何继续操作。

(1)--continue

用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。

kotlin 复制代码
$ git cherry-pick --continue

(2)--abort

发生代码冲突后,放弃合并,回到操作前的样子。

(3)--quit

发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。

git merge

1. 情况
复制代码
 主要你需要另一个分支所有代码变动,要求合并
2.基本用法

git merge 主要用于两个分支代码合并

sql 复制代码
git merge  <branch>

在使用 git merge 命令时,具体使用例子,如果你当前分支是 dev

yaml 复制代码
# 查看当前使用的分支
git brnch 
*dev

# 切换到 master 分支
git checkout master

# 对 dev 分支进行合并
git merge dev
3. 参数
css 复制代码
git merge [-ff] [--no-ff] [-n] [--stat] [--no-commit] [--squash] [--[no-]edit] [-s ] [-X ] [-S[]] [--[no-]rerere-autoupdate] [-m ] [...]
3.1 --ff 命令

--ff 是指fast-forward命令。当前使用fast-forward模式进行合并时,将不会创造一个新的commit节点。默认情况下,git-merge 采用fast-forward模式。

3.2 --no-ff 命令

即使可以使用fast-forward模式,也要创建一个新的合并

3.3 --ff-only 命令

除非当前 HEAD 节点已经 up-to-date(更新指向到最新节点)或者能够使用 fast-forward 模式进行合并,否则好的话将拒绝合并,并返回一个失败状态

3.4 --commit 命令

--commit 参数使得合并后产生一个合并结果的commit节点,该参数可以覆盖 --no-commit

3.5 --no-commit 命令

--no-commit 参数使得合并后,为了防止合并失败并不自动提交,能够给使用者一个机会在提交前审视和修改合并结果

3.6 --edit-e 以及 --no-edit

--edit-e 用于在成功合并、提交前调用编辑器来进一步编辑自动生成的合并信息。因此使用者能够进一步解释和判断合并的结果。 --no-edit 参数能够用于接受自动合并的信息(通常情况下并不鼓励这样做)。

切分支常用命令

  • 查看分支:git branch
  • 创建分支:git branch <name>
  • 切换分支:git checkout <name> 或者 git switch <name>
  • 创建+切换分支:git checkout -b <name> 或者 git switch -c <name>
  • 合并某分支到当前分支: git merge <name>
  • 把些提交合并到分支: git cherry-pick <commitHash>
  • 查看提交记录: git log -oneline
  • 删除分支: git brnach -d <namel>
相关推荐
Spider_Man1 分钟前
JavaScript对象那些坑:初学者必踩的“陷阱”与进阶秘籍
前端·javascript
海螺先生23 分钟前
Cursor 高阶使用指南:AI 辅助开发的深度整合
前端
我在北京coding24 分钟前
Uncaught ReferenceError: process is not defined
前端·javascript·vue.js
Hilaku25 分钟前
我为什么觉得 React 正在逐渐失去吸引力?
前端·react.js·前端框架
用户527096487449027 分钟前
🎨 Stylelint:让你的 CSS 代码优雅如诗
前端
日升27 分钟前
AI 组件库-MateChat 组件大全与主题定制
前端·ai编程·trae
龚思凯30 分钟前
TypeScript 中 typeof 的全面解析:从基础用法到高级技巧
前端·typescript
itslife32 分钟前
实现 render 函数 - 初始化更新队列
前端·react.js·前端框架
baozj33 分钟前
一次表单数据复用引发的 Bug:理解 Vue 中的 data 为何是函数
前端·javascript·vue.js
LRH35 分钟前
JS基础 - instanceof 理解及手写
前端·javascript