git - rebase 而不是快进

标签 git git-branch git-rebase

我是 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/

相关文章:

git - 删除分支上的 Git 提交

git - 将 2 提交压缩为 1

django - 服务器 : respond to collectstatic with "yes" 上的自动 django 接收 Hook

git - 在 rebase 之前挤压

Git 从另一个分支中选择更改

git - 如何使不可推送的提交可推送?

git - 如何从远程分支 pull 更新

git - 删除远程分支原点

php - 在 linux apache 上使 php 运行 python 脚本的权限

git - 将 git rm -f <file> 从另一个分支中删除文件