繁体   English   中英

没有结帐的Git拉?

[英]Git pull without checkout?

我习惯在我正在处理的分支中运行git pull和其他命令。 但我已经设置了一个可供多人工作的开发服务器,所以我不想在我这样做时切换分支。 如果我想从我们都使用的github存储库更新开发服务器上的现有分支,那么这样做的正确方法是什么? 如果我运行命令'git pull github branchname',那么只需将分支拉入当前分支?

我能找到的所有git示例似乎都表明你首先运行'checkout branchname',然后执行pull。 我试图避免这种情况。 正如我所说,这是一个现有的分支,我只想更新到最新版本。

我正在寻找相同的东西,最后在另一个stackoverflow帖子中找到了对我有用的答案: 合并,更新和拉Git分支而不使用checkout

基本上:

git fetch <remote> <srcBranch>:<destBranch>

我有同样的问题,有必要提交或存储当前的功能更改,checkout 分支,执行pull命令从远程到本地master工作区获取所有内容,然后再次切换到功能分支并执行rebase以使其达到 - 与主人的日期。

为了完成这一切,将工作区保留在功能分支上并避免所有切换,我这样做:

git fetch origin master:master

git rebase master

它很好地完成了诀窍。

使用

git fetch

代替。 它更新了repo中的远程引用和对象,但仅保留了本地分支,HEAD和工作树。

如果您希望在git fetch之后重新指向本地分支提示,则需要一些额外的步骤。

更具体地说,假设github repo具有分支DBCmaster (这个奇数分支名称集的原因将在一瞬间清楚)。 你是主机devhost ,你在一个repo, origin是github回购。 你执行git fetch ,它会带来所有对象并更新origin/Dorigin/Borigin/Corigin/master 到现在为止还挺好。 但是现在你说你想在devhost上发生一些事情发生在本地分支DBC和/或master devhost吗?

我有这些显而易见的(对我来说)问题:

  1. 为什么要更新所有分支的提示?
  2. 如果某个分支(例如B )提交了远程(github)repo缺少的内容怎么办? 它们应该合并,重新定位还是......?
  3. 如果您在某个分支(例如, C )上并且工作目录和/或索引被修改但未提交,该怎么办?
  4. 如果远程仓库添加了新分支( A )和/或分支已删除( D ),该怎么办?

如果(1)的答案是“因为devhost实际上不是用于开发,而是一个本地镜像,它只是保留了本地可用的github repo副本,这样我们所有的实际开发人员都可以快速读取它而不是慢慢阅读从github“,然后你想要一个”镜子“而不是”正常“的回购。 它不应该有一个工作目录,也许它不应该接受推送,在这种情况下剩下的问题就会消失。

如果还有其他答案,(2-4)会出现问题。

在任何情况下,这里有一种方法来解决基于远程引用更新本地引用(例如在运行git fetch -p之后):

for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
    local=${ref#refs/remotes/origin/}
    ... code here ...
done

... code here ...... code here ...部分取决于问题的答案(2-4)。

编辑:使用'git pull'它将从repo获取所有分支,并且还更新到最新if if branch for本地系统仅用于当前分支。 注意:git pull等同于fetch + merge,它获取所有分支但仅合并当前分支。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM