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

前言

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

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

git cherry-pick

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

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

git cherry-pick “commitHash”

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

git log -oneline

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

    a - b - c - d   Master
         \
           e - f - g Feature

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

# 切换到 master 分支
$ git checkout master

# Cherry pick 操作
$ git cherry-pick f

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

a - b - c - d - f   Master
         \
           e - f - g Feature

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

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

$ git cherry-pick feature

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

3. 转移多个提交

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

git cherry-pick <HashA> <HashB>

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

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

git cherry-pick A..B 

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

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

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

(1)--continue

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

$ git cherry-pick --continue

(2)--abort

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

(3)--quit

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

git merge

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

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

git merge  <branch>

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

# 查看当前使用的分支
git brnch 
*dev

# 切换到 master 分支
git checkout master

# 对 dev 分支进行合并
git merge dev

3. 参数
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>
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务