相关疑难解决方法(0)

GitHub Rebase & Merge 创建新的提交哈希

我想通过 PR 审查有选择地将多个提交从一个分支提升到另一个分支。

想象一下我的分支上有master以下提交:

8b08096 - mod4
97eff67 - mod3
b64891f - mod2
fa6e804 - mod1
956e388 - initial
Run Code Online (Sandbox Code Playgroud)

在我的staging分支上我只有以下内容:

956e388 - initial
Run Code Online (Sandbox Code Playgroud)

mod1我现在想将, mod2& mod3from 的提交“推广”masterstaging分支。因此,从staging我创建一个新的临时分支并合并提交开始,直到mod3

git checkout staging
git checkout -b promote
git merge 97eff67
Run Code Online (Sandbox Code Playgroud)

现在执行会git log向我显示所有提交,包括mod3我的promote分支上的提交:

git log --pretty=oneline

97eff67 (HEAD -> promote) mod3
b64891f mod2
fa6e804 mod1
956e388 (origin/staging, staging) initial

git push origin promote …
Run Code Online (Sandbox Code Playgroud)

git github

12
推荐指数
1
解决办法
3018
查看次数

从开发到主控的拉取请求,如何保持分支“均匀/同步”

我使用 git-flow 并根据 Github 保护规则我有分支masterdevelop受保护,两者都带有选项Require linear history

一切正常,但现在我想不只是从develop到合并master,而是开始使用“拉取请求”( develop -- PR --> master) 我想知道是否可以在保持历史线性的同时保持分支均匀/同步,而不需要对develop树枝施加力。

目前,如果我PRdevelopto创建一个拉取请求master,并且因为Require linear history选中了该选项,我无法合并,但只是squash and merge因为rebase and merge这样,如果我修改develop分支并进行另一次提交,它会提前 N 倍,但永远不会是“偶数” 。

我发现报复的唯一develop方法master就是

git pull origin master --rebase
Run Code Online (Sandbox Code Playgroud)

但这随后意味着强制推动:

git push -f
Run Code Online (Sandbox Code Playgroud)

不使用时PR,我只需将开发合并到master(FastForward)并保持历史线性,我可以合并拉取请求并通过禁用来防止强制推送Require linear history,但历史不会是线性的。(我认为 PR 没有使用 FastForward 合并)

我使用 git-flow 的原因是该develop …

git github git-flow pull-request

8
推荐指数
1
解决办法
4833
查看次数

按下“Rebase and merge”后,经过验证的签名消失了

所有推送到develop分支的提交都表明它们已经过验证。

为了合并从develop到的所有内容master,我决定单击一个按钮Rebase and merge。(我不想为 master 创建另一个新提交。)

令人惊讶的是,合并成功后,所有经过验证的签名都从 master 上消失了。

  1. 我在这里缺少什么?
  2. 我应该如何保留经过验证的签名?

git github branching-and-merging

2
推荐指数
1
解决办法
345
查看次数

可以 git stash;git checkout 主要;git 合并起源/主;git stash pop 可以简化吗?

我发现自己,作为工作流程的一部分,经常这样做:

  • 我在一个分支上(我们称之为topic
  • 我向 CI 发送提交,topic以便将其合并
  • 我想做另一轮改变,所以我继续努力topic
  • mainCI同时合并更改(在 GitHub 上,这意味着在我的情况下进行合并提交 - GitHub 显然不会在这里进行快进合并;请参阅此答案
  • 所以我想重新进行main我一直在进行的更改的更新
  • 我尝试查看,它的内容与现在main相同,但是topic
  • git抱怨我的本地更改将被覆盖,因为我在本地修改了一些与上次提交相同的文件,所以我必须:
  • git stash
  • git checkout main
  • git fetch; git merge origin/main
  • git stash pop

我知道git命令有很多选项。有没有一种方法可以一步完成上述四步过程,或者更少的步骤(无需编写脚本)?合并总是干净利落地应用,因为origin/main和 的topic内容相同(但git历史不同)。

这个悬而未决的问题表明也许整个序列可以被替换为git checkout -m。那是对的吗?

git github

2
推荐指数
1
解决办法
78
查看次数