gpt4 book ai didi

git - rebase 而不是快进

转载 作者:太空狗 更新时间:2023-10-29 14:25:46 27 4
gpt4 key购买 nike

我是 GIT 的新手,我不知道我的问题是否已经有了答案。请在将其标记为重复之前仔细阅读。

我有一个分支,我们称它为 public,它被推送并与 origin 同步。有一次,我创建了另一个分支,private,它从 public 中 pop ,因为我想做很多我想保密的工作。所以我只在 private 上工作,比方说,我做了 10 次提交,直到我最终达到可以公开的状态。

现在,我显然不想对public 进行快进 merge ,因为所有中间提交都会出现在远程服务器上。如果 public 分支没有偏离创建 private 的点,我该如何做 rebase

显然,我想在 public 分支上创建一个新提交,其中包含来自 10 个 private 提交的所有修改。我知道这会转化为 rebase,但我不知道该怎么做。

最佳答案

首先,public 正在跟踪 位于origin 上的远程分支这一事实并不意味着本地分支public 相当于远程分支origin/public

由于 git 的分布式特性,只要不推送,您就可以在本地 public 分支上进行大量提交,而无需将任何内容发送到服务器。

关于您在给定系统当前状态下尝试执行的操作,这里有一些详细步骤,假设您不关心保留最初的 10 次提交。

  1. 开始针对远程服务器的当前状态进行交互式 rebase 。

    git checkout private
    git rebase -i origin/public
  2. 将 pop 一个编辑器。具体的编辑器将取决于平台和环境变量设置。在此编辑器中,您将看到 10 次提交的哈希值,左侧栏中带有“pick”一词。对于第一行,保留 pick。对于后续行,将 pick 替换为 squash。保存文件并退出编辑器。

  3. 此时,git 会将 10 个提交 merge 为一个提交,因此我们可以 merge 到 public 中并推送。

    git checkout public
    git merge private
    git push

如果您想在本地 private 分支上保留原来的 10 次提交,您可以改为快进 merge 到本地 public 分支并在那里 rebase .

git checkout public
git merge private
git rebase -i origin/public
# Do the same rebase steps as above
git push

关于git - rebase 而不是快进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29842140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com