天道酬勤,学无止境

如何告诉 Git 总是拉主分支?(How to tell Git to always pull the master branch?)

问题

我发现 git docs 关于这个问题非常神秘。 想做一件简单的事,但似乎做起来一点都不简单。

我有以下情况:

$ git remote -v
origin  git://192.168.0.49/mnt/repos
stick   /mnt/titanium/podaci/repos

我可以使用git pull从原点获取和合并,并且工作正常:

$ git pull
Already up-to-date.

我可以像这样从棒中拉出:

$ git pull stick master
Already up-to-date.

但是,当我在没有部件的情况下从棒中拉出时,我收到以下消息:

$ git pull stick
From /mnt/titanium/podaci/repos
 * [new branch]      su2009  -> stick/su2009
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

    branch.master.remote = <nickname>
    branch.master.merge = <remote-ref>
    remote.<nickname>.url = <url>
    remote.<nickname>.fetch = <refspec>

See git-config(1) for details.

有些事情让我感到困惑。 “你的配置文件”在这里是什么意思? 我应该编辑哪个文件,我应该输入什么? 在这种情况下,昵称是什么?

我希望我想要完成的事情很常见,但我无法通过示例找到直截了当的答案。

回答1

“您的配置文件”在这里是什么意思?

您的存储库配置文件,位于存储库根.git/config中。 (在~/.gitconfig还有一个每个用户的全局配置文件,但您不想将特定于存储库的设置放在那里。)

我应该编辑哪个文件,我应该输入什么?

您可以使用git config程序来编写配置信息,而不是手动输入。 但是,如果您想手动完成,只需打开.git/config —— 语法相当简单。

在这种情况下,昵称是什么?

在这种情况下,昵称是遥控器的名称 - 所以“棒”。 您不必担心remote.*选项,因为它们已经设置好了,但是您确实需要设置branch.*选项。 这些选项告诉 Git 在执行git pull from stick 时要合并的内容。

假设您想在执行git pull from stick 时从 stick 合并 master。 你可以这样做:

# Sets stick as default remote for git pull.
# Note that origin will no longer be the default remote for git pull!
$ git config branch.master.remote stick

# Automatically merge in stick's master branch when doing a git pull
$ git config branch.master.merge refs/heads/master

所以现在,当你在没有任何远程或 refspec 信息的情况下执行git pull ,它将从stick 中获取所有分支,并合并到stick 的主分支中。 请注意, origin 将不再是默认遥控器; 要合并 origin 的 master 分支,您必须使用git pull origin master

如果您不想将默认遥控器更改为stick,则必须继续使用git pull stick master

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在不添加单独的遥控器的情况下使叉子保持同步?(How can I keep my fork in sync without adding a separate remote?)
    问题 假设在GitHub上有一个存储库someone/foobar ,我将其分叉给了me/foobar 。 如何将新的提交从父存储库直接拉到我的fork ,而不必添加单独的远程服务器并记住定期从那里拉出? 目标是: git pull从父存储库获取 git push将所有内容发送到我的叉子 回答1 打开分支的Git存储库me / foobar 。 点击比较: 您将收到通知: 没有什么可比较的。 someone:master是最新的,其中包含me:master的所有提交。 尝试切换基准进行比较。 单击此页面上的切换基础: 然后,您可以查看在分叉某天之后对某人/ foobar所做的所有提交。 点击创建请求请求: 为拉取请求提供一个标题,可能还提供一个描述,然后单击“创建拉取请求” 。 在下一页上,滚动到页面底部,然后点击合并拉取请求和确认合并。 您的Git存储库me / foobar将被更新。 编辑:变基选项显示在这里: 回答2 git remote set-url origin git@github.com:someone/foobar git remote set-url origin --push git@github.com:me/foobar 但是有一个警告: 如果您是唯一对叉子进行更改的人,那么这是完美的选择。 但是,如果与其他人共享,则可能需要从叉子上拉出,在这种情况下
  • Git将母版合并到功能分支中(Git merge master into feature branch)
    问题 假设我们在Git中有以下情况: 创建的存储库: mkdir GitTest2 cd GitTest2 git init 在主服务器中进行一些修改并提交: echo "On Master" > file git commit -a -m "Initial commit" Feature1从master分支出来,并完成了一些工作: git branch feature1 git checkout feature1 echo "Feature1" > featureFile git commit -a -m "Commit for feature1" 同时,在主代码中发现一个错误,并建立了一个修补程序分支: git checkout master git branch hotfix1 git checkout hotfix1 该错误已在hotfix分支中修复,并重新合并到master中(可能在请求请求/代码审查之后): echo "Bugfix" > bugfixFile git commit -a -m "Bugfix Commit" git checkout master git merge --no-ff hotfix1 Feature1的开发仍在继续: git checkout feature1 假设我在功能分支中需要此修补程序,也许是因为该错误也发生在这里。
  • 我如何告诉git始终选择本地版本以进行特定文件上的冲突合并?(How do I tell git to always select my local version for conflicted merges on a specific file?)
    问题 假设我正在通过git存储库与某人进行协作,并且有一个特定的文件我永远都不想接受任何外部更改。 有什么办法让我设置本地存储库,以免每次git pull时都抱怨合并冲突? 合并此文件时,我总是想选择本地版本。 回答1 在配置文件的特定实例上,我同意罗恩的回答: 配置应该是工作空间的“专用”(因此“忽略”,如“在.gitignore文件中声明”一样)。 您可能拥有一个带有标记化值的配置文件模板,以及一个将该config.template文件转换为私有(且被忽略)配置文件的脚本。 但是,该特定备注不能回答更广泛的一般性问题,即您的问题(!): 如何告诉git始终为特定文件上的冲突合并选择本地版本? (对于任何文件或文件组) 这种合并是“复制合并”,在这种情况下,只要有冲突,您将始终复制文件的“我们的”或“他们的”版本。 (正如Brian Vandenberg在评论中指出的, “ ours ”和“ theirs ”在这里用于合并。 将它们颠倒以进行变基:请参阅“为什么git-svn颠倒了“我们的”和“他们的”的含义”,它使用了变基,“ git变基,跟踪'本地'和'远程'”) 对于“文件”(一般来说,不是一个“ config”文件,因为这是一个不好的例子),您可以使用通过合并调用的自定义脚本来实现。 Git将调用该脚本,因为您将定义一个gitattributes值
  • 默认情况下,如何使我的所有存储库都使用Git pull使用rebase?(How to make Git pull use rebase by default for all my repositories?)
    问题 有没有一种方法可以设置主机Git存储库,以便从其(本地)克隆完成的所有git pull默认情况下都使用--rebase ? 通过搜索Stack Overflow,我了解了branch.autosetuprebase ,但是需要单独为每个克隆配置它。 我的项目流程的建立,使得我们pull的develop之前分支merge荷兰国际集团一个特性分支它。 这种pull几乎总是使用--rebase ,所以我试图弄清楚这是否可以是默认值。 回答1 现在,默认的拉动行为有3种不同的配置级别。 从最普通的到最细的颗粒是: 1. pull.rebase 将其设置为true意味着git pull始终等同于git pull --rebase (除非branch.<branchname>.rebase显式设置为false )。 也可以针对每个存储库或全局进行设置。 2. branch.autosetuprebase 将此设置为always意味着无论何时创建跟踪分支,都将为其创建一个配置条目,如下所示。 为了获得更精细的控制,还可以将其设置为never , local或remote并且可以针对每个存储库或全局进行设置。 有关更多详细信息,请参见git config --help 。 3. branch.<branchname>.rebase 将其设置为true意味着除非明确使用git pull -
  • 为什么我需要一直做“ --set-upstream”?(Why do I need to do `--set-upstream` all the time?)
    问题 我在Git中创建一个新分支: git branch my_branch 推它: git push origin my_branch 现在说有人在服务器上进行了一些更改,我想从origin/my_branch 。 我愿意: git pull 但是我得到: You asked me to pull without telling me which branch you want to merge with, and 'branch.my_branch.merge' in your configuration file does not tell me, either. Please specify which branch you want to use on the command line and try again (e.g. 'git pull <repository> <refspec>'). See git-pull(1) for details. If you often merge with the same branch, you may want to use something like the following in your configuration file: [branch "my_branch"] remote = <nickname>
  • 如何更新GitHub分叉存储库?(How do I update a GitHub forked repository?)
    问题 我最近分叉了一个项目,并应用了多个修复程序。 然后,我创建了一个请求请求,该请求随后被接受。 几天后,另一位贡献者进行了另一项更改。 因此,我的前叉不包含该更改。 我怎样才能把零钱放到我的叉子上? 当我有其他更改要贡献时,是否需要删除并重新创建我的fork? 还是有一个更新按钮? 回答1 在您的分支存储库的本地克隆中,您可以将原始GitHub存储库添加为“远程”。 (“ Remotes”就像是存储库URL的昵称-例如, origin是一个。)然后,您可以从该上游存储库中获取所有分支,并重新整理工作以继续使用上游版本。 在可能看起来像的命令方面: # Add the remote, call it "upstream": git remote add upstream https://github.com/whoever/whatever.git # Fetch all the branches of that remote into remote-tracking branches git fetch upstream # Make sure that you're on your master branch: git checkout master # Rewrite your master branch so that any commits of yours that
  • 为什么要调用git branch --unset-upstream进行修复?(Why call git branch --unset-upstream to fixup?)
    问题 在git中进行高级操作时,我还是一个新手。 我使用博客框架Octopress维护我的博客。 尽管Octopress自2011年以来未进行任何开发,但它很好地满足了我的目的,因此到目前为止,我还没有想到要进行任何更改。 仅供参考,我的博客托管在Github Pages上。 今天,在git status新帖子时, git status显示以下消息: On branch source Your branch is based on 'origin/master', but the upstream is gone. (use "git branch --unset-upstream" to fixup) 对于所有后续命令(如git add .重复相同的消息git add . , git commit -m 'message'和git push origin source 。 该消息是什么意思? 东西坏了吗? 如果是,那是什么? 我需要修复它吗? 如果可能的话,请指向pdf / web文章,我可以阅读该文章并在以后理解。 更多细节: bash-3.2$ git branch -a * source remotes/octopress/2.1 remotes/octopress/HEAD -> octopress/master remotes/octopress/gh-pages
  • 我可以告诉git pull覆盖而不是合并吗?(Can I tell git pull to overwrite instead of merge?)
    问题 据我git pull someRemote master , git pull someRemote master尝试将远程分支合并到我的分支中。 有没有办法使用git pull说“完全丢弃我的东西,只是让我成为远程服务器的另一个克隆”? 我仍然想保留自己的存储库并保留其历史记录,但是在该命令之后,我想拥有someRemote的master分支的1:1副本。 为了澄清,假设有2个存储库,RM和MY。 数字是提交,并且仅假设一个分支(主节点)。 RM1 --- RM2 --- RM3 --- RM4 --- RM5 --- RM6 ... | | +-> MY1 --- MY2 --- MY3 -+-> MY4 --- MY5 --- MY6 ... 因此,我以RM1的克隆形式启动了自己的存储库。 然后我开心地发展,RM开心地发展,但是我们从不共享我们的工作。 在MY3之后,我意识到我的分店不是很好,但RM4还是不错的。 所以我想git pull RM4存入MY。 但是,我不希望我的MY1-3更改继续存在,我希望MY4是RM4的1:1副本。 但是,我想保留自己的历史,理想情况下,我希望在MY3和RM4之间或在MY3和RM2-4之间进行更改。 它仍然应该保留在我的存储库中。 那可能吗? (这是针对GitHub项目的,我可以分叉一个项目,进行一些实验,将其搁置几个星期
  • 使用“git pull”时,如何将 Git 配置为自动从当前分支拉取?(How do I configure Git to automatically pull from current branch when using “git pull”?)
    问题 使用我们当前的设置,你总是必须输入分支名称(即: git pull origin feature-branch ”在进行拉取时。我已经犯了从一个分支拉入另一个分支的错误,不小心将两个分支与两个截然不同的分支合并我想通过配置 Git 来避免这种情况,这样只需输入git pull就会拉出您所在的当前分支。 我该怎么做呢? 回答1 您可以创建一个跟踪分支。 来自 Git 手册 (http://git-scm.com/book/en/Git-Branching-Remote-Branches): 当你克隆一个仓库时,它通常会自动创建一个跟踪origin/master的master分支。 这就是为什么git push和git pull在没有其他参数的情况下开箱即用的原因。 但是,如果您愿意,您可以设置其他跟踪分支——那些不跟踪origin分支和不跟踪master分支的分支。 简单的例子就是你刚刚看到的例子,运行git checkout -b [branch] [remotename]/[branch] 。 如果您有 Git 版本 1.6.2 或更高版本,您还可以使用--track速记: $ git checkout --track origin/serverfix Branch serverfix set up to track remote branch refs/remotes
  • 在 git 流模型中,我应该从 master 中的合并提交构建到发布吗?(In the git flow model should I build from the merge commit in master to release?)
    问题 在我的公司,我们有一个 CI/Build 服务器,用于测试和构建版本(以及功能和开发分支)。 在 git flow 分支模型中,当需要发布时,您将分支开发并命名(例如)release-1.4。 然后 CI/Build 服务器将自动构建分支,我们将其部署到临时服务器以进行手动集成测试。 一旦我们对构建感到满意,我们就会部署它。 但是在 git flow 分支模型中,我们需要先合并到 master 和 tag。 问题是,在这次合并之后,我们是否需要运行另一个构建和测试周期? 合并和标记最终标记指向与构建版本不同的(技术上)提交似乎很奇怪。 在我们进入 master 之后重建似乎也很糟糕,因为我们会觉得有必要测试该构建以确保它也正常。 我想出的选项是: 在发布分支中构建,然后在主分支中合并重建和测试在发布分支中构建和测试然后合并并相信不需要新的构建修改 git flow 模型,去掉合并到 master 的步骤,只在我们要发布的发布分支中标记最后一次提交。 不合并到 master 会丢失什么? 在这种情况下,我们可能只是在 master 中开发 回答1 问题是,在这次合并之后,我们是否需要运行另一个构建和测试周期? 该合并不应该破坏任何东西,因为它应该是一个快进合并,master 上的所有提交都在发布分支上。 因此,您不能在 master post-merge
  • git:对“非快进”错误的基本误解(git: basic misunderstanding of “non-fast-forward” error)
    问题 我自己工作时不了解git的基础是可以的,但是现在我正在与另一个人一起工作,并且我们每个人都提交pull请求以使它们彼此合并,这开始成为一个问题。 工作流程:我在“作者”分支中编写。 准备好进行审查时,我提交了一个拉取请求,然后我的编辑器将该请求合并到主请求中。 当她对我有评论时,她提交了她的Editor分支的拉取请求,然后我将它们合并到master中。 今天,我收到了一个完全令人发指的循环错误,我不明白要求我做什么。 thomas@trigger ‹ author ↑● › : ~/pm/wip [1] % git push To https://github.com/mathpunk/punk-mathematics-text.git ! [rejected] Editor -> Editor (non-fast-forward) ! [rejected] author -> author (non-fast-forward) error: failed to push some refs to 'https://github.com/mathpunk/punk-mathematics-text.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the
  • Git合并报告“已经更新”,尽管有所不同(Git merge reports “Already up-to-date” though there is a difference)
    问题 我有一个带有2个分支的git存储库:master和test。 主分支和测试分支之间存在差异。 两个分支均已提交所有更改。 如果我做: git checkout master git diff test 出现一个充满变化的屏幕,显示差异。 我想合并测试分支中的更改,然后这样做: git merge test 但是收到消息“已经是最新的” 但是,检查每个不同分支下的文件显然会显示出差异。 这是什么问题,我该如何解决? 回答1 消息“已经是最新的”表示您要合并的分支中的所有更改都已合并到您当前所在的分支中。 更具体地说,这意味着您要合并的分支是当前分支的父级。 恭喜,这是您做过的最简单的合并。 :) 使用gitk查看您的存储库。 “测试”分支的标签应位于“主”分支标签下方的某处。 您的分支机构相对于其父分支是最新的。 根据合并,自上次合并以来,父项中没有新的更改。 这并不意味着分支是相同的,因为您可以在工作分支中进行大量更改,听起来就像您所做的那样。 编辑10/12/2019: 根据Charles Drake在对此答案的评论中,补救该问题的一种解决方案是: git checkout master git reset --hard test 这使它回到“测试”级别。 然后做: git push --force origin master 为了迫使变更返回中央仓库。 回答2
  • 如何检查远程(原始)Git存储库中的更改(How to check for changes on remote (origin) Git repository)
    问题 执行以下工作流程的Git命令是什么? 设想 我从一个存储库克隆并对本地存储库做了一些自己的提交。 同时,我的同事们对远程存储库进行了提交。 现在,我要: 检查远程存储库上是否有其他人的新提交,即origin ? 假设自上次上载以来,远程存储库中有三个新提交,我想比较远程存储库中的提交,即HEAD~3与HEAD~2 , HEAD~2与HEAD~1和HEAD~1与HEAD 。 在知道远程更改之后,我想从其他人那里获取最新的提交。 到目前为止我的发现 对于步骤2:我知道插入符号HEAD^ , HEAD^^等以及波浪号HEAD~2 , HEAD~3等等。 对于步骤3:我猜只是git pull 。 回答1 您可以git fetch origin来更新存储库中的远程分支以指向最新版本。 对于与遥控器的区别: git diff origin/master 是的,您也可以使用插入符号。 如果要接受远程更改: git merge origin/master 回答2 git remote update && git status 在检查Git是否需要拉动的答案中找到了这一点 git remote update使您的远程引用保持最新。 然后,您可以做几件事之一,例如: git status -uno会告诉您正在跟踪的分支是在前,在后还是在分支。 如果什么也没说,则本地和远程相同。 git show
  • 由于当前分支的尖端位于其远程对应的后面,因此更新被拒绝(Updates were rejected because the tip of your current branch is behind its remote counterpart)
    问题 我们的工作流程就是这样。 我们有一个分支叫dev ,我可以在origin/dev 。 当我们进行更改时,我们将创建一个dev分支: git checkout -b FixForBug原始/开发 现在,我有一个名为FixForBug的分支,该分支正在跟踪(我认为这是正确的词) origin/dev 。 因此,如果我执行git pull它将对origin/dev带来新的变化,这是很棒的。 现在,当我完成修复程序后,我将推到一个名为同一个东西的远程分支。 首先,我从origin/dev下拉所有更改并重新设置基准: git pull --rebase 然后,将更改推送到同名的远程分支: git push origin FixForBug 现在,远程服务器上有一个分支,我可以创建一个拉取请求,以将更改批准并合并回dev分支。 我从来没有推什么origin/dev自己。 我猜这是很普通的工作流程。 第一次执行git push ,它可以正常工作并创建远程分支。 但是,如果我第二次按下(例如,在代码审查期间,有人指出了一个问题),则会出现以下错误: 错误:无法将某些引用推送到“ https://github.limeade.info/Limeade/product.git” 提示:由于当前分支的尖端位于其远程对应的后面,因此更新被拒绝。 在再次推送之前,集成远程更改(例如提示:'git
  • 如何确定何时创建Git分支?(How to determine when a Git branch was created?)
    问题 有没有一种方法可以确定何时创建Git分支? 我在存储库中有一个分支,并且我不记得创建它了,并认为也许看到创建时间戳会影响我的记忆。 回答1 采用 git show --summary `git merge-base foo master` 如果您希望使用gitk在上下文中看到它,请使用 gitk --all --select-commit=`git merge-base foo master` (其中foo是您要查找的分支的名称。) 回答2 正如评论和Jackub的答案中指出的那样,只要您的分支小于配置设置gc.reflogexpire设置的天数(默认为90天),那么您就可以利用自己的reflog来查找何时分支引用是第一次创建的。 请注意,git reflog可以使用大多数git log标志。 还要注意, HEAD@{0}样式选择器实际上是时间的概念,实际上是作为日期字符串处理的(以一种骇人听闻的方式)。 这意味着您可以使用标志--date=local并获得如下输出: $ git reflog --date=local 763008c HEAD@{Fri Aug 20 10:09:18 2010}: pull : Fast-forward f6cec0a HEAD@{Tue Aug 10 09:37:55 2010}: pull : Fast-forward e9e70bc
  • git pull --rebase在同事的git push --force之后丢失了提交(git pull --rebase lost commits after coworker's git push --force)
    问题 我以为我了解git pull --rebase的工作方式,但是这个示例使我感到困惑。 我猜想以下两种情况会产生相同的结果,但是它们是不同的。 首先,可行的。 # Dan and Brian start out at the same spot: dan$ git rev-parse HEAD 067ab5e29670208e654c7cb00abf3de40ddcc556 brian$ git rev-parse HEAD 067ab5e29670208e654c7cb00abf3de40ddcc556 # Separately, each makes a commit (different files, no conflict) dan$ echo 'bagels' >> favorite_foods.txt dan$ git commit -am "Add bagels to favorite_foods.txt" brian$ echo 'root beer' >> favorite_beverages.txt brian$ git commit -am "I love root beer" # Brian pushes first, then Dan runs `git pull --rebase` brian$ git push dan$ git pull -
  • “ u”到底是做什么的? “ git push -u原始主机”与“ git push原始主机”(What exactly does the “u” do? “git push -u origin master” vs “git push origin master”)
    问题 尽管我尽了最大的努力去理解git,但我显然还是很害怕使用git。 从kernel.org进行git push : -u --set-upstream 对于每个最新的或成功推送的分支,请添加上游(跟踪)引用,该引用由无参数的git-pull(1)和其他命令使用。 有关更多信息,请参见git-config(1)中的branch.<name>.merge 。 这里的branch.<name>.merge从git config : branch.<name>.merge 与branch.<name>.remote一起定义给定分支的上游分支。 它告诉git fetch / git pull合并哪个分支,并且还可能影响git push(请参阅push.default)。 当在分支<name> ,它告诉git fetch将默认的refspec标记为要合并到FETCH_HEAD中。 该值的处理方式类似于"branch.<name>.remote"的远程部分,并且必须匹配从"branch.<name>.remote"给定的远程获取的ref。 git pull(首先调用git fetch)使用合并信息来查找要合并的默认分支。 如果没有此选项,则git pull默认情况下将合并获取的第一个refspec。 指定多个值以获取章鱼合并。 如果您希望设置git
  • 如何在Git中克隆所有远程分支?(How to clone all remote branches in Git?)
    问题 我有一个master和一个development分支,都推送到了GitHub。 我已经clone d, pull ed和fetch ed,但是除了master分支以外,我仍然无法获得其他任何东西。 我敢肯定我遗漏了一些明显的东西,但是我已经阅读了手册,一点都没有高兴。 回答1 首先,克隆一个远程Git存储库并cd到其中: $ git clone git://example.com/myproject $ cd myproject 接下来,查看存储库中的本地分支: $ git branch * master 但是您的存储库中还隐藏着其他分支! 您可以使用-a标志查看它们: $ git branch -a * master remotes/origin/HEAD remotes/origin/master remotes/origin/v1.0-stable remotes/origin/experimental 如果您只想快速浏览上游分支机构,则可以直接签出: $ git checkout origin/experimental 但是,如果要在该分支上工作,则需要创建一个本地跟踪分支,该分支可以通过以下方式自动完成: $ git checkout experimental 你会看到 Branch experimental set up to track remote
  • git:您的分支在X提交之前(git: Your branch is ahead by X commits)
    问题 这实际上是怎么发生的? 我目前正在一个仓库中工作,因此这是我的工作流程: 变更档案犯罪重复1-2直到满意推向高手 然后,当我执行git status它告诉我我的分支在X提交之前(大概与我进行的提交数量相同)。 是因为当您推送代码时,它实际上并未更新本地缓存的文件(在.git文件夹中)吗? git pull似乎可以“修复”这个奇怪的消息,但是我仍然很好奇为什么会发生这种情况,也许我使用git是错误的吗? 包括邮件中打印的分支 我当地的分行领先于分行 您在哪里推/拉当前分支 我正在推向GitHub,并拉到当时碰巧正在使用的任何计算机,我的本地副本始终是最新的,因为我是唯一正在使用它的计算机。 它实际上并没有检查远程仓库 那就是我的想法,我认为我将确保对它的理解是正确的。 您是否为此传递了一些额外的论点? 不是我可以看到的,也许我的终端上正在进行一些有趣的配置? $ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean) 回答1 如果在执行git pull remote branch后收到此消息,请尝试使用git fetch跟踪它。 (可选地,运行git fetch
  • 添加Git子模块时如何指定分支/标签?(How can I specify a branch/tag when adding a Git submodule?)
    问题 git submodule add -b如何工作? 在添加具有特定分支的子模块后,新的克隆存储库(在git submodule update --init )将处于特定提交,而不是分支本身(子模块上的git status显示“当前不在任何分支上”)。 我在.gitmodules或.git/config上.gitmodules有关子模块的分支或任何特定提交的任何信息,那么Git如何解决呢? 另外,是否可以指定标签而不是分支? 我正在使用1.6.5.2版。 回答1 注意:Git 1.8.2增加了跟踪分支的可能性。 请参阅下面的一些答案。 习惯起来有点困惑,但是子模块不在分支上。 就像您说的那样,它们只是指向子模块存储库的特定提交的指针。 这意味着,当其他人签出您的存储库或提取您的代码并进行git子模块更新时,该子模块将签出到该特定提交。 这对于不经常更改的子模块非常有用,因为这样项目中的每个人都可以在同一提交中拥有该子模块。 如果要将子模块移动到特定标签: cd submodule_directory git checkout v1.0 cd .. git add submodule_directory git commit -m "moved submodule to v1.0" git push 然后,另一个想要将submodule