我是 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 次提交。
开始针对远程服务器的当前状态进行交互式 rebase 。
git checkout private git rebase -i origin/public
将 pop 一个编辑器。具体的编辑器将取决于平台和环境变量设置。在此编辑器中,您将看到 10 次提交的哈希值,左侧栏中带有“pick”一词。对于第一行,保留
pick
。对于后续行,将pick
替换为squash
。保存文件并退出编辑器。此时,
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/