git:定期推送重新基址分支的更好选择

标签 git branch push

我有一个网站的 git 存储库,其中主分支代表生产代码。我被要求设置该网站的“沙盒”版本,供系统的潜在用户进行试验,这样他们就不必在生产系统中执行此操作。

由于该网站的沙箱版本需要明确标记,并且禁用一些功能,因此我创建了一个沙箱分支(基于 master)并在那里进行了一些提交以添加警告消息等。

然后,我将两个分支推送到上游,并在 Web 服务器上检查了单独目录中的每个分支 - 一个用于生产,一个用于沙箱。

这工作正常,但是当我想编写更多代码时问题就出现了。一旦我将代码提交到主分支,它将在生产系统中更新,但沙箱不会看到新代码。因此,我将沙箱分支重新设置为主分支,因此沙箱的提交始终位于生产之上。但是,当然,一旦我这样做了,我就不能再将沙盒分支推向上游,因为它不再是快进。我必须登录 git 服务器,切换分支,进行软重置,然后重做推送。

肯定有更好的方法用 git 来做到这一点吗?我真正需要的是某种方法,在当前 checkout 的任何分支之上一致地应用一些提交。

最佳答案

您可以使用 git Push Remote +branch 进行非快进推送。然而,接收 git 存储库可以配置为拒绝这些。

但是,如果您对旧版本的分支进行了编辑,但已将重新调整的版本推送到上游,则可能会遇到一些小问题。解决此问题的一种方法如下:

# you are on branch X and origin/X has been force-updated
git branch X-tmp   # keep a reference to your new commits
git fetch origin
git reset --hard origin/X   # now X is the same as origin/X

# now you have two options
# option 1: move the new commits from X-tmp to X by cherry-picking
# them one-by-one
git cherry-pick abc123
git cherry-pick def456

# option 2: this rebase should do the right thing and detect the equivalent
# commits in X and X-tmp
git checkout X-tmp
git rebase X

关于git:定期推送重新基址分支的更好选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743164/

相关文章:

git - 是否可以根据日期时间进行浅层 git 克隆?

git - 错误 : fatal loose object ### (stored in . git/objects/.... 已损坏)

git - 分支是什么时候从 master 上 fork 出来的?

git - 如何找出当前分支基于的 git 分支?

mercurial - 在 Mercurial (hg) 中,如果发出 "hg push",如何查看将推送的文件列表?

git - 自托管存储库的优点(和缺点)是什么(换句话说 : GitLab vs Bitbucket)?

git - 为什么在提交后 Hook 中设置 GIT_WORK_TREE 不起作用?

branch - 如何将分支逻辑持久化到数据库中?

iphone - 推送通知错误: "Unable to set local cert chain file"

javascript - 为什么这个简单的基于数组的事件发射器顺序敏感?