前言
之前用git一直都使用Sourcetree工具,并且都是独立维护一个项目,所以很少有代码冲突或者需要切分支,合并分支的操作。最近换了一家公司,前端开发比较多,项目也不是单独固定维护,那git 知识的短板就嘎嘎的暴露出来,这两次操作都拉了同事帮忙。 最近学习的记录下。
最近使用合并代码的
git
命令 主要有以下2种
git cherry-pick
1. 情况
主要适用于你只需要部分代码变动或者某几个提交
2. 基本用法
git cherry-pick
命令就是将指定的提交内容用于其他分支上面
git cherry-pick "commitHash"
commitHash 指的是当前分支的提交记录,每个哈希值会不一样,可以通过下面命令看到提交内容的哈希值
git log -oneline
举个例子,代码仓库有master
和feature
两个分支。
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>