git - 仅与上游存储库共享( pull 请求)一些提交

标签 git pull-request

我们面临着这样一种情况:我们正在为我们的公司(GA)定制一个 Web 应用程序,并且需要通过 pull 请求将一些更改发送到 git 上游存储库。上游 Web 应用程序是“AUS”。更改将保存在特定文件中,并且在工作完成之前就已知晓。所有工作(即使是 AUS)都将在 GA 中捕获。

我们如何在不重复提交(来自 cherry-pickrebase)的情况下解决这个问题,并保持干净且易于遵循?

我为此制定了一个“秘诀”并想分享它。

最佳答案

我描述了配方并显示了 SourceTree 所看到的存储库状态的屏幕截图(因为它一次显示了所有分支)。请注意,分支是“au”、“ga”和“master”,而不是配方中使用的 GPT-99_description_AU、GPT-99_description_GA 和 GPT-99_description。

(您可能会问为什么每个代码块之前有一个额外的行和一个句点 - 这是我今天可以对其进行格式化的唯一方法!)

  1. 创建 3 个分支。他们应该反射(reflect)正在解决的问题,并为 AuScope 制定一个,为 GA 制定另一个。我们还需要一个来 merge 到

.

$ git checkout master # or whatever base branch we will be using
$ git branch GPT-99_description
$ git branch GPT-99_description_AU
$ git branch GPT-99_description_GA
  1. 执行 GA 分支上的所有工作

.

$ git checkout GPT-99_description_GA
  1. 根据需要执行编辑、添加文件和删除文件
  2. 确定将发送到 AUS 的文件,因为它们必须单独提交(否则我们如何将这些提交发送到 AUS?)
  3. 提交 AUS 文件。使用标识为 AUS 文件提交的内容开始提交消息

.

$ git add <files>
$ git commit -m "GPT-99 - AUS files - ..." 

也许可以使用标记来代替消息。稍后再看。

  1. 提交 GA 文件。不需要识别信息。

.

$ git add <files>
$ git commit -m "GPT-99 - ..."

SourceTree view after add, delete, edit

  1. 切换到 AuScope 分支

.

Switch to the AuScope branch
  1. 挑选 AuScope 提交(查看日志)

.

$ git cherry-pick SHA#1
$ git cherry-pick SHA#2
...

After cherry-picking

  1. 现在发生的事情是提交已被复制并将存在于 GA 和 AUS 分支上。提交是分开的(它们具有不同的 SHA),但它们的实质是相同的 - 如果两者都重播,则会出现冲突,因为两者都将尝试添加/删除/编辑相同的内容。我们可以使用 https://git-scm.com/book/en/v2/Git-Branching-Rebasing#Rebase-When-You-Rebase 中描述的 git 技巧。 ,其中复制的提交将有一个 patch-id,用于将提交标识为相同。这允许我们进行 rebase,并且 git 会将不同的提交解析为一个

.

$ git rebase --onto GPT-99_description GPT-99_description_AU GPT-99_description_GA

enter image description here

  1. 重复的提交现已 merge 。然而,GA 分支没有 AUS 更改。为了实现这一点,我们 merge :

.

$ git checkout GPT-99_description_GA
$ git merge GPT-99_description_AU
  1. 存储库现在处于以下状态:所有更改都位于 GA 分支上,并且打算作为 pull 请求发送到 AuScope 的更改位于 AU 分支上。

After merge - separate branch to do a pull request on

关于git - 仅与上游存储库共享( pull 请求)一些提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32600066/

相关文章:

python - 另一个 pymacs 助手在 30 秒内没有启动(但有更多调试)

Git 无法使用 IntelliJ 或 SourceTree 在我的项目上提交 Angular 文件夹

Git 工作流 : forking a project and maintaing a local modified copy, 但保持最新

jenkins - 如何在不推送新提交的情况下重新启动 Github 检查?

git - 有没有办法从GitHub上已删除分支的PR中获取代码?

github - 以编程方式更改 github 拉取请求的基本分支

git - 在提交消息前添加部分分支名称

Git for Windows 远程拒绝 master -> master (解包器错误)

Github pull request hooks、静态代码分析和临时回滚

git - 禁用 GitHub 上的 merge 按钮,直到 pull 请求获得批准