如何将不同的本地Git分支推送到Heroku/master

Law*_*den 384 git push github heroku git-push

Heroku有一个忽略所有分支但是"主人"的政策.

虽然我确信Heroku的设计师有很好的理由来制定这个政策(我猜测存储和性能优化),但作为开发人员,我的后果是无论我在做什么本地主题分支,我都想要一个简单的方法将Heroku的主人切换到该本地主题分支并执行"git push heroku -f"以覆盖Heroku上的master.

我从阅读http://progit.org/book/ch9-5.html的"Pushing Refspecs"部分得到的是

git push -f heroku local-topic-branch:refs/heads/master

我真正喜欢的是一种在配置文件中设置它的方法,以便"git push heroku"始终执行上述操作,将local-topic-branch替换为我当前分支的名称.如果有人知道如何做到这一点,请告诉我!

当然,需要注意的是,如果我是唯一可以推送到Heroku应用程序/存储库的人,那么这只是明智的.测试或QA团队可能会管理这样的存储库来尝试不同的候选分支,但是他们必须进行协调,以便他们在任何特定的日子都同意他们推动的分支.

毋庸置疑,拥有一个单独的远程存储库(如GitHub)也是一个非常好的主意,没有这个限制来支持所有内容.我称之为"原点"并使用"heroku"用于Heroku,以便"git push"始终将所有内容备份到源,并且"git push heroku"将我当前所有的分支推送到Heroku的主分支,覆盖它如有必要.

这会有用吗?

[remote "heroku"]
    url = git@heroku.com:my-app.git
    push = +refs/heads/*:refs/heads/master

在开始实验之前,我想听听更有经验的人,虽然我想我可以在Heroku上创建一个虚拟应用程序并进行实验.

至于提取,我真的不在乎Heroku存储库是否是只写的.我还有一个单独的存储库,比如GitHub,用于备份和克隆我的所有工作.

脚注:这个问题与使用Heroku的分支策略的Good Git部署类似,但不完全相同

jas*_*ssa 1513

请参阅https://devcenter.heroku.com/articles/git#deploying-code

$ git push heroku yourbranch:master
Run Code Online (Sandbox Code Playgroud)

  • 可能需要-f力. (21认同)
  • @DaveMeehan这仍然有效.您正在尝试执行`git push:master`,它通过覆盖它来删除主分支.这与用另一个分支覆盖它不同.Heroku可能有保护措施,以防止删除主分支. (2认同)
  • @nxmohamad除非您的分支位于master分支后面,并且您想覆盖Heroku上的当前代码,否则不会这样做。 (2认同)

Chr*_*sen 123

使用通配符时,它必须出现在refspec的两侧,因此+refs/heads/*:refs/heads/master不起作用.但你可以使用+HEAD:refs/heads/master:

git config remote.heroku.push +HEAD:refs/heads/master
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用git push直接执行此操作:

git push heroku +HEAD:master
git push -f heroku HEAD:master
Run Code Online (Sandbox Code Playgroud)

  • 什么是这两个命令之间的差异,还是我们必须执行这两个命令 (4认同)
  • @Chris Johnson:你能告诉我们-f参数意味着什么而不是RTFMing这里的人吗? (3认同)
  • @SaadMasood:最后一个`git push`命令做同样的事情.有关`-f`选项的含义和refspec中的`+`,请参阅`git push --help`. (2认同)

小智 50

git push -f heroku local_branch_name:master
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这使用`-f`或`--force`,最好始终确保在强制按下时知道自己在做什么。 (2认同)

Ash*_*sim 14

对我来说,它有效,

git push -f heroku otherBranch:master
Run Code Online (Sandbox Code Playgroud)

建议使用 -f(强制标志)以避免与其他开发人员的推送发生冲突。由于您没有将 Git 用于版本控制,而仅用作传输,因此使用 force 标志是一种合理的做法。

来源:-官方文档


tec*_*ams 8

将不同的本地Git分支推送到Heroku/master的最安全的命令.

git push -f heroku branch_name:master
Run Code Online (Sandbox Code Playgroud)

注意:尽管可以在不使用-f的情况下推送,但建议使用-f(强制标志)以避免与其他开发人员推送冲突.

  • 您不认为先不使用 -f 是更好的做法吗?那么如果有冲突,首先确认是否可以覆盖它们 (3认同)

Jon*_*son 5

另请注意,如果您使用git flow系统和功能分支可能会被称为

feature/mobile_additions
Run Code Online (Sandbox Code Playgroud)

并使用一个名为stagingtwo的git远程服务器,则将命令推送到heroku将是

git push stagingtwo feature/mobile_additions:master
Run Code Online (Sandbox Code Playgroud)


Dr *_*Nic 5

git push heroku $(git branch --show-current):master
Run Code Online (Sandbox Code Playgroud)

交替:

git push heroku HEAD:master
Run Code Online (Sandbox Code Playgroud)