我有一个网站的 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/