2

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

因为站点的沙盒版本需要清楚地标记,并且禁用了一些功能,所以我创建了一个沙盒分支(基于 master)并在那里进行了一些提交以添加警告消息等。

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

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

用 git 肯定有更好的方法吗?我真正需要的是在当前签出的任何分支之上持续应用一些提交的某种方式。

4

2 回答 2

1

我会通过在需要的两个代码路径都存在于主分支中来以不同的方式做到这一点。

例如。使用一些配置文件(不受版本控制),您可以切换到其他代码路径。或者一些环境变量——任何最适合你的。

于 2012-10-05T18:47:46.483 回答
1

您可以使用 进行非快进推送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
于 2012-10-19T19:46:01.140 回答