我想从FeatureBranch合并到master,而不是首先使用checkout master''。 我试过(在FeatureBranch中)
git push . master
但我得到了一定程度的惊讶:
Everything up-to-date
尽管FeatureBranch中的提交尚未(但)存在于master中
我希望能够做到的一步本地推送的原因是:
我知道我可以用不同的方式在更多的步骤中做到这一点。但我想知道是否有一步到位的解决方案(我认为应该有)。
我认为/意识到,如果出现冲突,无论如何我都必须切换到主人。但在大多数情况下,我没有冲突,因此可以从一步解决方案中受益。
我的git版本:
git --version
git version 1.6.5.1.1367.gcd48
(视窗)
TIA
karolrvn
答案 0 :(得分:2)
关于push
命令为何如此行事的问题......
Push用于将提交从一个存储库传播到另一个,而不是传播到存储库中的分支。在您的情况下,您正从一个存储库推送到同一个存储库,因此答案是“一切都是最新的”,就像它应该的那样。在这种情况下,您命名两个不同分支的事实无关紧要。
答案 1 :(得分:1)
您不能提交除当前分支以外的分支;换句话说,git commit
创建的新节点始终是当前HEAD的子节点。
我偶尔使用一个单独的'staging'repo,以避免在我的实时开发环境中切换分支的开销:
# Currently working on branch 'foo' in $SOME_DIR/main-repo
# main-repo is a local clone of shared-repo
# Create the staging repo alongside the existing main-repo
cd $SOME_DIR
git clone shared-repo staging-repo
cd staging-repo
git remote add local ../main-repo
# Switch back to main-repo and continue working
cd main-repo
# (Make changes and commit to branch foo ...)
# Switch to the staging repo
cd $SOME_DIR/staging-repo
# Make sure we are up to date with shared repo (*)
git pull
# Merge changes from main-repo
git fetch local
git merge local/foo
# Push changes up to the shared repo
git push
这种方法的一个潜在问题是,它不允许您测试在分支'foo'上所做的更改中合并的结果与同时在shared-repo / master (*)
中进行的任何更改。根据更改的性质,这可能没问题,但在大多数情况下,您希望在推送到共享存储库之前至少进行快速的健全性检查(例如检查代码是否仍然编译,可能运行冒烟测试)。 / p>
为了做到这一点,你需要:
$SOME_OTHER_DIR/staging-repo
。这样就可以在不破坏main-repo环境的情况下构建和/或测试staging-repo。答案 2 :(得分:0)
看来你真正想做的是合并,而不是推动?不幸的是,如果没有作为合并目标的分支,我认为这是不可能的,所以命令序列将是:
git checkout master
git merge FeatureBranch
git checkout FeatureBranch
整个操作应该不到一秒钟,所以我不确定为什么你强烈反对为此更改为主分支......
答案 3 :(得分:0)
问题“Merging Branches Without Checkout”提供了很好的答案,解释了为什么需要结账 保持一个单独的仓库(目标分支签出)是另一种方式。
但重点仍然是:push/pull与远程回购有关 结帐是关于本地回购。
如果您考虑到这种架构,则意识到您没有推送到master
。
答案 4 :(得分:0)
我遇到了同样的问题,根据你的想法,我发现解决方案非常简单:
git push . HEAD:master
这是有效的,只要master可以快速转发到当前的头部,即你在master上启动当前分支并且从那时起就没有对master进行新的提交。