我使用以下命令推送到我的远程分支:
git push origin sandbox
如果我说
git push origin
是否会推动我其他分支的更改,还是只更新我当前的分支?我有三个分支:master
,production
和sandbox
。
git push
文档对此并不十分清楚,所以我想澄清这一点。
以下git push
命令会更新哪些分支和遥控器?
git push
git push origin
上面的 origin
是遥控器。
我知道git push [remote] [branch]
只会将该分支推送到遥控器。
答案 0 :(得分:1519)
您可以通过在git config中设置push.default来控制默认行为。来自the git-config(1) documentation:
push.default
定义如果在命令行上没有给出refspec,在远程中没有配置refspec,并且命令行上给出的任何选项都没有暗示refspec,那么git push应采取的操作。可能的值有:
nothing
:不要推送任何东西
matching
:推送所有匹配的分支
两端具有相同名称的所有分支都被视为匹配。
这曾经是默认设置,但不是因为Git 2.0(simple
是新的默认设置)。
upstream
:将当前分支推送到其上游分支(tracking
是上游的弃用同义词)
current
:将当前分支推送到同名分支
simple
:( Git 1.7.11中的新内容)与上游类似,但如果上游分支的名称与本地分支不同,则拒绝推送
这是最安全的选择,非常适合初学者。
此模式已成为Git 2.0中的默认模式。
简单,当前和上游模式适用于那些想要在完成工作后推出单个分支的人,即使其他分支尚未准备好被推出
命令行示例:
查看当前配置:
git config --global push.default
设置新配置:
git config --global push.default current
答案 1 :(得分:198)
您可以使用push.default
为git设置默认行为git config push.default current
或者如果您有许多存储库并希望所有存储库都相同
git config --global push.default current
此设置中的当前表示默认情况下,当您执行 git push
时,仅推送当前分支其他选项包括:
更新 - 新的方式
从Git 1.7.11开始,执行以下操作:
git config --global push.default simple
这是一个引入的新设置,其工作方式与当前相同,并且根据谣言将从v 2.0默认为git
答案 2 :(得分:197)
git push origin
将推送具有匹配远程分支的本地分支上的所有更改origin
至于git push
的示例部分像
git push <remote>
一样工作,其中<remote>
是当前分支的远程(或原点,如果没有为当前分支配置远程)。
答案 3 :(得分:54)
我刚将代码提交到分支并将其推送到github,如下所示:
git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments
答案 4 :(得分:24)
以下是关于 Git Push 的非常方便且有用的信息: Git Push: Just the Tip
git push最常见的用途是将本地更改推送到公共上游存储库。假设上游是名为“origin”的远程(默认远程名称,如果您的存储库是克隆),并且要更新到/来自的分支名为“master”(默认分支名称),则完成以下操作:{ {1}}
git push origin master
会将所有本地分支的更改推送到原始远程的匹配分支。
git push origin
会将更改从本地主分支推送到远程主分支。
git push origin master
会将更改从本地主分支推送到远程分段分支(如果存在)。
答案 5 :(得分:19)
(2012年3月)
注意:默认的“matching
”政策可能会很快改变
(有时在git1.7.10之后):
请参阅“Please discuss: what "git push" should do when you do not say what to push?”
在当前设置(即
push.default=matching
)中,没有参数的git push
将推送本地和远程存在的所有分支同名。
这通常适用于开发人员推送到自己的公共存储库时,但在使用共享存储库时可能会造成混淆。建议将默认设置更改为“
upstream
”,即仅推送当前分支,然后将其推送到分支git pull将从中拉出。
另一位候选人是“current
”;这会将当前分支仅推送到同名的远程分支。到目前为止所讨论的内容可以在这个帖子中看到:
http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694
以前的相关讨论包括:
要加入讨论,请将您的消息发送至:git@vger.kernel.org
答案 6 :(得分:18)
我只是把它放在我的.gitconfig别名部分,并喜欢它的工作原理:
pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"
将当前分支推送到git pub
或另一个带git pub repo-name
的仓库。可口。
答案 7 :(得分:9)
您可以使用命令
推送当前分支@Singleton
@DependsOn("DefaultEmailService")
public class CustomerService implements UserHandlingService {
private DefaultEmailService mailService;
@Inject
public CustomerService(DefaultEmailService mailService) {
this.mailService = mailService;
}
}
@Singleton
@Startup
public class DefaultEmailService implements EmailService {
public DefaultEmailService() {
}
}
(取自here)
答案 8 :(得分:8)
git push会尝试将所有本地分支推送到远程服务器,这可能是您不想要的。我有几个便利设置来解决这个问题:
别名“gpull”和“gpush”:
在我的〜/ .bash_profile
中get_git_branch() {
echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'
因此,执行“gpush”或“gpull”将只推送我的“当前开启”分支。
答案 9 :(得分:7)
您可以在.gitconfig
中更改默认行为,例如:
$query = "SELECT COUNT(*) as num FROM {$tableName}";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages['num'];
if (!empty($total_pages)) {
echo $total_pages . " Results found.";
} else {
echo "Sorry! No results found.";
}
要检查当前设置,请运行:
[push]
default = current
答案 10 :(得分:3)
我不是使用别名,而是更喜欢创建git-XXX脚本,这样我就可以更轻松地控制它们了(我们的开发人员在他们的路径上都有这种类型的源控制目录)。
此脚本(称为git-setpush
)会将remote.origin.push
值的配置值设置为仅推送当前分支的内容:
#!/bin/bash -eu
CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH
echo "setting remote.origin.push to $NEW_PUSH_REF"
git config remote.origin.push $NEW_PUSH_REF
请注意,在我们使用Gerrit
时,它会将目标设置为refs/for/XXX
以进入审核分支。它还假设origin是您的远程名称。
使用
签出分支后调用它git checkout your-branch
git setpush
它显然可以适应结帐,但我喜欢脚本do one thing and do it well
答案 11 :(得分:2)
我已将以下函数添加到我的.bashrc文件中以自动执行这些任务。它确实是git push / git pull +当前分支的名称。
function gpush()
{
if [[ "x$1" == "x-h" ]]; then
cat <<EOF
Usage: gpush
git: for current branch: push changes to remote branch;
EOF
else
set -x
local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
git push ${bname}
set +x
fi
}
function gpull()
{
if [[ "x$1" == "x-h" ]]; then
cat <<EOF
Usage: gpull
git: for current branch: pull changes from
EOF
else
set -x
local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
git pull ${bname}
set +x
fi
}