我有一个网站的git存储库,其中的主分支代表产品代码。我被要求建立一个‘沙盒’版本的网站,让系统的潜在用户进行实验,这样他们就不必在生产系统中这样做。
因为站点的沙箱版本需要清楚地标记为这样的版本,并且禁用了一些功能,所以我创建了一个沙箱分支(基于master),并在那里进行了一些提交,以添加警告消息等。
然后,我将两个分支都推到上游,在web服务器上,我将每个分支都签出到一个单独的目录中-一个用于生产,另一个用于沙箱。
这很好用,但是当我想要写更多的代码时,问题就来了。一旦我将代码提交到主分支,它将在生产系统中更新,但沙箱将看不到新代码。因此,我将沙箱分支重新设置为master,以便沙箱的提交始终位于生产的顶部。但当然,一旦我这样做了,我就不能再往上游推沙箱分支了,因为它不再是快进了。我必须登录到git服务器,切换分支,执行软重置,然后重做推送。
当然有更好的方式用git来做这件事了吧?我真正需要的是在当前签出的分支上一致地应用一些提交的方法。
发布于 2012-10-20 03:46:01
您可以使用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-06 02:47:46
我会以不同的方式实现这一点,在需要的情况下,两个代码路径都存在于master分支中。
例如:使用一些配置文件(不受版本控制),您可以切换到其他代码路径。或者一些环境变量--任何最适合你的。
https://stackoverflow.com/questions/12743164
复制相似问题