艾丽游戏ing

git合并某一次提交(git合并某个commit)

艾丽游戏ing 1

整个过程中主要用到的工具是 merge 和 read-tree,前者用于合并历史记录并且中断在最后提交之前,所产生的文件冲突不会被写入硬盘;然后利用后者重写整个文件树并把读取到的内容(读取的目标是 backend)写入新的路径下。

git合并某一次提交(git合并某个commit)git合并某一次提交(git合并某个commit)


最后提交以结束合并。

第2步里,我们把 backend 作为 remote server 添加到 frontend 库中。

-f 的作用是在添加后立刻 fetch。

要注意一定得使用绝对路径来引用 backend 库。

第3步里,--strategy ours 比较难以理解,且听我详细道来:一般来说当合并两个文件树时,如果遇到冲突我们是需要手动去解决它的,但是目前我们要做的不是解决冲突,而是在引入 backend 历史记录的前提下完整保留 frontend 的内容。

冲突肯定是会有的,即使两个不同的项目也是如此,比方说两边都有 README.md、app/、config/ 等文件或目录,但是我们不关心冲突,我们只要保留 frontend 的文件树并且把 backend 的历史记录合并进来。

场景 :本地做了四次提交,想把第 2、3、4 次提交合并,只保留第二次提交的commit message

解决方案 :

1、git reflog 查看所有的提交记录

p.s. git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作);git log 命令可以显示所有提交过的版本信息,看不到删除的记录。所以买后悔药回退删除记录的时候,可以用 git reflog

上面的图片展示了,一共四次提交,按照时间倒序排列分别是 第 4、3、2、1次提交

2、git rebase -i “最新的一个想保留的 Commit”

意思是,我想合并2、3、4,那么最新一个想保留的 commit 就是 第一次 commit,他的hash值为 ae9c811,输入下列命令并回车

或者

3、选择要合并的 commit :上述步骤完成后会跳出下图界面

注意这个时候的顺序:最近一次提交在最下面

前面三行是我们需要操作的三个 Commit,每行最前面的是对该 Commit 操作的 Command。关于每个 Command 具体做什么,下面的注释写得非常清楚。为了完成我们的需求,我们可以关注到这两个命令:

我们可以选择把第 3、4 次的commit message合并到第二次上面,修改command如下,并保存退出:

4、编辑合并 commit 的 commit message

上述步骤完成后,会跳出如下界面

5、检查:使用git log检查

结果如下:

注意,使用git reflog仍可以查看最初的命令:

两者的区别在于,git log只显示保留的,git reflog可以显示 reset 和 rebase、删除的版本

编译器的可视化git工具中的展示:

这个时候再push,提交记录上就非常好看了

请注意 :

一、查看reflog日志

二、记住要合并的commit id 例如合并 c803bc9 (origin/dev-2.0-darkness, dev-2.0-darkness) HEAD@{2}: commit: 状态监测布局优化调整 。输入以下命令即可

Git不同项目代码分支合并,且仅合并特定提交

使用场景: 项目中同一个服务在2个不同的仓库中开发,当在2中开发的 部分功能 需要合并到1中时。

操作步骤:

1)在需要合并的目录打开gitbash,执行

git remote add 远程别名 远程地址

2)git fetch 别名 分支名

此处必须使用 git fetch,因为 git pull = git fetch + git merge,会自动合并所有提交,从而导致不需要的提交被合入当前分支。

3)在gitlab commit查看commit的hash值,或者使用git log查看。复制需要合并的单个或多个hash后,执行命令:

4)使用git status确认状态无误后,执行git push即完成合并

1、git log查看提交历史,并复制出自己需要的commit号

2、git checkout xxx切换到xxx分支,执行git cherry-pick a0e042cf593514c3b3ad5facf614a6ec17bee2fb,

3、如果提示冲突,就到vscode解决冲突;解决完冲突,git add . ---> git commit -m 'xxxx' ---> git push。

4、如果没有冲突直接 git push。

git 合并某分支某次commit到另一个分支

将新分支dev2的一次提交,合并到dev1中

1、切到分支dev2

2、切换分支到dev1

上面结束之后,如果不想合并可以用 git cherry-pick --abort 放弃本次合并,否则直接push到远程库

push到远程git仓库