Branch 持续跟踪 master

2024-02-23

从最近开始,我的分支机构现在默认情况下跟踪并推送到远程主机,即使我这样做git push -u origin branch_name即使我使用matching as my push.default option.

# --------
# STEP 1
# --------
$ git checkout -b my_branch
Branch my_branch set up to track local branch master.
Switched to a new branch 'my_branch'

# --------------------------------------------------------------------------------
# STEP 2: (same behavior BTW with current/upstream/simple)
# --------------------------------------------------------------------------------
$ git config --global push.default matching

# --------
# STEP 3:
# --------
$ git push -u origin my_branch
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 1.16 KiB | 0 bytes/s, done.
Total 8 (delta 7), reused 0 (delta 0)
To XX:YYY/my_repo
   62d390c..4e4baa1  my_branch -> master
Branch my_branch set up to track remote branch master from origin.

另外,如果我尝试以下操作STEP 2,我收到错误:

$ git branch --set-upstream-to=origin/my_branch
error: the requested upstream branch 'origin/my_branch' does not exist
hint:
hint: If you are planning on basing your work on an upstream
hint: branch that already exists at the remote, you may need to
hint: run "git fetch" to retrieve it.
hint:
hint: If you are planning to push out a new local branch that
hint: will track its remote counterpart, you may want to use
hint: "git push -u" to set the upstream config as you push.

我知道我可以编辑.git/config手动,但是WHY上面的方法不起作用吗?


$ git remote -v
origin  XX:YYY/my_repo (fetch)
origin  XX:YYY/my_repo (push)

$ git --version
git version 2.9.2

这一点很可疑,因为中间的线不应该出现:

$ git checkout -b my_branch
Branch my_branch set up to track local branch master.
Switched to a new branch 'my_branch'

例如,当我这样做时git checkout -b foo在存储库中:

$ git checkout -b foo
Switched to a new branch 'foo'

Note the lack of an upstream setting. My guess is that your gco alias-or-script has --track inside it somewhere. Edit: This turns out to be because you'd configured branch.autoSetupMerge to always, so new branches created from local branches track their local branch.

这只是问题的一半,但如果这没有发生,完整的问题就不会发生。因此解决方法之一是删除该设置(默认值似乎是大多数人最想要的)。


解决问题的另一半:

$ git branch --set-upstream-to=origin/my_branch
error: the requested upstream branch 'origin/my_branch' does not exist

问题here这正是 Git 所说的:origin/my_branch不存在。嗯,它不存在yet:你需要说服你的 Git 有一个origin/my_branch。 Git 就是 Git,有很多方法可以做到这一点,但可能是最好的方法,我们稍后会介绍。

$ git push -u origin my_branch
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 1.16 KiB | 0 bytes/s, done.
Total 8 (delta 7), reused 0 (delta 0)
To XX:YYY/my_repo
   62d390c..4e4baa1  my_branch -> master
Branch my_branch set up to track remote branch master from origin.

这就是事情出错的地方:因为my_branch 已经有一个上游设置master (not origin/master, just master),你的 Git 要求其他 Git 使用该名称master,就好像您运行了:

git push origin my_branch:master

因为这没有其他问题git push,他们这边按照你那边的要求做——设置their master来匹配你的my_branch——然后你方按照你的要求去做-u,即将上游设置更改为master to origin/master。那不是你meant当然要问。

(而且:用你的 Git 来代替似乎有点邪恶master当那是一个local master, i.e., branch.my_branch.remote只是., not origin。但假设我们无法改变 Git 本身......)

我看到三种简单的方法可以解决这个问题:

  1. 使用显式的远程端名称:git push -u origin my_branch:my_branch。这会覆盖当前的上游设置,以便您的 Git 要求其 Git 写入my_branch。如果成功了——应该成功了——你的 Git 现在将拥有origin/my_branch并将更改您的上游设置my_branch to origin/my_branch.

    这里的一个缺点是,如果推送失败,您的 Git 不会更改当前的上游设置。当然,这对于一般情况来说是正确的git push -u(包括接下来的两种方法,但是在这两种情况下,不会为未来留下任何陷阱)。

  2. 明确地delete运行之前的当前上游设置git push: git branch --unset-upstream my_branch(或任何等效的内容,包括编辑.git/config文件)。既然没有现有的上游,你的 Git 不会要求他们的 Git 使用该名称master.

    一旦你的 Git 要求他们的 Git 创建my_branch(而不是master) on origin,我们回到第一种方法发生的情况。

  3. 避免设置您的本地master首先作为上游。效果与方法2相同。

One hard做到这一点的方法是伪造你的 Git:你可以创建一个远程跟踪分支,而无需实际访问远程。为此,您必须使用“plumbing”命令git update-ref, 而不是git branch。如果你这样做了,那么你可以使用--set-upstream-to在实际在远程创建分支的推送之前。 (另一个困难的方法是你使用的编辑技巧.git/config直接,或者做同样的事情git config。这允许你将上游设置为尚不存在的东西,因为 Git 在这里真正做的就是存储names.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Branch 持续跟踪 master 的相关文章

  • 无法从 Git 扩展向 GitHub 进行身份验证?

    我只是在 Visual Studio 2010 中设置 Git 扩展 但无法真正使其工作 我无法进行身份验证 在 Git Extensions 中 如果我选择 Plugins gt GitHub 我可以添加用户 密码 API 令牌并选择 S
  • Git Push 远程:致命:包超出允许的最大大小

    我接到了一个大项目 客户想将其添加到github 我是一点一点添加的 然后发生的事情是我太贪心了 一次添加了太多文件 现在 无论我尝试什么 我都会不断收到此错误 我怎样才能解决这个问题 我试图回滚 但也许我做错了 git push Ente
  • 使用 Git 处理 subversion:忽略对跟踪文件的修改

    我目前正在使用 subversion 存储库 但我正在使用 git 在我的计算机上本地工作 它使工作变得更加容易 但也使 subversion 存储库中发生的一些不良行为变得非常明显 这给我带来了问题 拉取代码后 有一个有点复杂的本地构建过
  • github Diff 截断错误

    在 github 中发出拉取请求并审查更改时 我们收到了 Diff Truncated 错误 如下所示 任何人都可以帮助解决这个问题 拉取请求可能会触发以下提到的限制之一GitHub 支持 https stackoverflow com a
  • git 工作目录中的更改拒绝恢复

    我的 git 工作目录中有五个文件git status显示为已修改 当我git diff他们 整个文件显示为已更改 我有core autocrlf true但似乎没有效果 当我试图从同事那里获取更改时 真正的问题出现了 修改 的文件之一会被
  • 在功能分支上运行测试

    我有一个构建配置 其中包含连接到 git 分支的测试 VCS 根dev 3 个构建步骤和 1 个触发器 这些是我的构建步骤 构建测试 运行测试 构建和部署 我想为分支运行所有这些构建步骤dev但只有其中两个 构建和运行测试 用于分支匹配fe
  • 如何设置“阅读文档”以使 Sphinx autodoc 选项发挥作用?

    我的项目不是使用 autodoc 构建的 我遇到了关于我的项目未在 autodoc 中构建的常见问题 https read the docs readthedocs org en latest faq html my project isn
  • 使用 SourceTree 克隆存储库

    有人可以给我一个简单的使用 SourceTree 克隆存储库的快速演练吗 在书签中 我单击克隆存储库 对于源路径 我粘贴如下所示的 URL 电子邮件受保护 cdn cgi l email protection 客户端 应用程序名称 ios
  • 运行 flutter doctor 吐出错误:标准错误:致命:坏对象 HEAD

    我已经从官方网站安装了 Flutter 和 Android Studio 我是 Git GitHub 移动开发和 Android 开发的新手 我试图在命令提示符 Windows 10 中运行 flutter doctor 命令 但是 它会以
  • 在 git 中管理 schema.rb 的首选方法是什么?

    我不想添加schema rb to gitignore 因为我希望能够从该文件加载新的数据库架构 然而 保持检查状态会导致各种虚假冲突 而这些冲突很容易通过新的解决方案解决 db migrate reset 基本上我想要一种方法 将 sch
  • 从 Eclipse 的历史视图中删除 ORIG_HEAD 和 FETCH_HEAD

    我最近开始使用 Eclipse Kepler 和 EGit 插件 这些分支不是我习惯的 有没有办法永久阻止这些分支的创建 我尝试手动删除它们 但它不起作用 并且我不想在下次获取或变基时保留它们 据我从对您问题的评论中了解到 您只希望这些参考
  • 名称和电子邮件在 Git 的每用户配置文件中设置,但 Git 仍使用默认生成的名称和电子邮件

    标题已经说了 但我会更彻底地解释一下 我已使用以下命令按照建议配置了用户名和电子邮件 git config global user name git config global user email 我可以通过执行以下操作来验证这是设置的g
  • Git 与人工制品

    刚刚完成 NPM 和 Bower 的 Artifactory 设置 它非常容易使用 您只需更改存储库 URL 一切就正常了 查看有关如何让 Artifactory 与 github vcs 一起使用的文档 它看起来过于复杂 我想知道是否有人
  • 在 git 中记录前 10 个

    两个问题 如何从头到尾显示 git 中的前 10 个提交 无分行 如何指定提交索引并记录它 显示第二个或第三个 我知道 git 使用父级来链接提交 很容易从头到尾记录提交 喜欢 git log HEAD 10 但我需要从头到尾查询 可以吗
  • git 从存储中删除文件

    我有一个藏匿处 里面有一堆文件 但由于文件冲突 我无法应用我的存储 我已经在我的存储中发现了有问题的文件 我想将其删除 如何从存储中删除单个文件而不破坏整个文件 存储是一次提交 或者实际上是两次甚至有时是三次提交 并且您无法更改提交 那么
  • 如何在 git 交互式 rebase 中将提交与下一个提交合并?

    git rebase i允许通过以下方式将提交与前一个提交合并squash or fixup 这两个选项都需要至少一次提交pick ed 当一个人想要使用第一个提交但丢弃其提交消息时 情况怎么样 换句话说 如果我希望第一个提交与后续提交合并
  • 如何更改全局 git 设置以在拉取期间进行 git 合并

    目前 我的全局设置设置为在 git pull 期间执行变基操作 我希望它默认将其更改为 git merge 如何更改此设置 TL DR git config global pull rebase false 有点细节 Git 使用配置pul
  • Git-svn:批量删除孤立的远程分支

    我正在处理的 SVN 项目 通过 git svn 有经常创建的分支 然后与主干重新集成 然后删除 现在项目大约有10个分支没有被删除 但是在git中 gitbranch r显示大约有50个 我可以一次删除这些 检查它们是否仍然存在于 svn
  • git reword 在变基期间显示合并冲突,但是 pick 工作正常

    我正在尝试用很少提交的另一个分支来重新建立一个分支 虽然提交包括合并提交 但我可以使用以下命令成功地对其进行变基git rebase i r m
  • Git 用户配置文件 - 自定义忽略

    我们有一个由 5 名开发人员组成的团队致力于硬件项目 我们有一个 user config h 文件 其中包含每个用户的特定环境和偏好的 defines 例如他们使用的硬件版本 是否应该打开声音等 目前 该文件位于我们的 gitignore

随机推荐