- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个本地分支“master”跟踪一个远程分支“origin/master”。
当我这样 checkout 时:
git checkout refs/heads/master
我最终得到了一个独立的 HEAD:
Note: checking out 'refs/heads/master'.
You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.
显然我可以只检查“master”,但这恰好是一个模棱两可的引用。我只想知道在不分离 HEAD 的情况下消除分支名称歧义的“git 方式”是什么。
最佳答案
git checkout
的文档没有说明当 master
不明确时它的行为方式。查看源代码(我浏览得很快,所以我可能错了),看起来 git checkout
假设提供的名称(例如 master
)是一个分支名称,直到它发现 refs/heads/*
中没有给定名称的引用。
因此,当修订不明确时检查分支的正确方法是省略 refs/heads/
,例如 git checkout master
。
请注意,指定分支 和指定修订(或其他对象)之间存在细微但重要的区别。对于采用修订(或一般对象)的命令和选项,指定 master
与指定 refs/heads/master
相同,除非 master
不明确。它也与指定 master^0
或 master
指向的 SHA1 等相同。
对于采用分支的命令和选项(例如 git branch
或 --branches
等命令的 git log
选项),指定 master
与指定 refs/heads/master
不同。在这些情况下,完整的字符串 refs/heads/master
被解释为分支的名称,导致 Git 创建/检查/更新名为 refs/heads/refs/heads/master
而不是 refs/heads/master
的引用。
git checkout
命令用途广泛,很方便,但在 master
与 refs/heads/master
等情况下可能会造成混淆。当您指定 master
并且存在名为 refs/heads/master
的引用时,git checkout
假定您指的是 master
分支,而不是 master
指向的修订版。当您指定 refs/heads/master
并且名为 refs/heads/refs/heads/master
的引用不存在时,则 git checkout
假定您指的是 master
指向的修订版,而不是名为 refs/heads/master
的分支(因此您得到一个分离的 HEAD
)。
如果你想查看其他一些短名称也是 master
的 ref(例如名为 master
的标签),你必须拼出完整的 ref 名称(例如 git checkout refs/tags/master
)或以这样的方式拼写修订版不能解释为有效的分支名称(例如 git checkout master^0
)。后者导致 git checkout
遵循 git help revisions
中描述的消歧规则:
When ambiguous, a
<refname>
is disambiguated by taking the first match in the following rules:
- If
$GIT_DIR/<refname>
exists, that is what you mean (this is usually useful only forHEAD
,FETCH_HEAD
,ORIG_HEAD
,MERGE_HEAD
andCHERRY_PICK_HEAD
);- otherwise,
refs/<refname>
if it exists;- otherwise,
refs/tags/<refname>
if it exists;- otherwise,
refs/heads/<refname>
if it exists;- otherwise,
refs/remotes/<refname>
if it exists;- otherwise,
refs/remotes/<refname>/HEAD
if it exists.
当然,结果将是分离的 HEAD
,但当您 checkout 非分支时,这种情况总是会发生。
关于git checkout refs/heads/master 分离 HEAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789604/
我在 2 个不同的节点中设置了 master-master mysql 复制。假设如果我要再添加一个节点,即 3rd master ,我是否需要在新服务器中拥有与节点 1 和节点 2 中完全相同的数据
我认为我在理解 git 的基本概念方面是正确的。 我已经设置并克隆了一个远程存储库。我还创建了一个服务器端空存储库,并将我的本地存储库链接到它。 我的问题是我不明白: origin/master 与
从概念上讲,Master-Master 复制是如何工作的? 我认为碰撞将是一种需要以某种方式解决的常见事件。 最佳答案 主-主复制(更一般地——多主复制)在概念上的工作原理是假设冲突并不常见,并且只保
众所周知,mysql 是异步复制的。我听说我需要一些额外的插件来做 同步复制。 那么让我们考虑一下异步复制的情况:master 将事件写入其二进制日志,但不知道 master2 是否或何时检索并处理了
我正在寻求有关 MySql Master-Master 配置问题的帮助。 我正在处理由另一名员工设置的服务器配置,该员工现在无法就此事提供任何帮助。这是我第一次体验这样的设置,在做了相当多的研究之后,
尝试使用 HADOOP 运行 HBASE 时出现以下错误HBASE 0.98.xHADOOP 2.4.0 ERROR [main] master.HMasterCommandLine: Mas
停止独立 Spark Master 失败并显示以下消息: $ ./sbin/stop-master.sh no org.apache.spark.deploy.master.Master to sto
我不确定这是否是一个正常的分支场景,但是...... 假设我从 master 创建一个分支,比如分支 C,然后 merge 回其他先前存在的分支,比如分支 A 和 B,回到 master,然后我需要分
我无法推送到我的 git 存储库。 git clone和 git pull工作正常,但 git push不起作用。 我检查了其他答案,如 here尝试了几种方法,例如 git push origin
所以如果我在 master 中做: git checkout -b my-branch 并在那里做几次提交+推送。然后我做: git checkout master git pull 我现在能以某种方
我设置了 2 个 MYSQL 服务器: my.cnf server1: auto_increment_increment = 2 auto_increment_offset = 1 my.cnf se
我想知道一个服务器是否可以同时是slave和master。我们的问题是我们有很多移动单元需要同步到主服务器,但它们只需要主服务器上 100 个表中的 6 个。除了延迟同步和增加数据成本之外,所有额外的
我有主-主 Mysql 复制。每个主控复制其他主控。谁能解释一下为什么该主机上的 log-bin 文件不同? (尺寸差异很小)。谢谢! 最佳答案 嗯。我们决定使用 mysql 5.6 及其功能 - G
我正在努力理解这里的逻辑,如果术语不正确,我深表歉意。 我正在尝试构建一个功能类似于邮件的应用程序,IE: 所有邮箱 > 特定邮箱 > 消息 其中“所有邮箱”和“特定邮箱”占据 Controller
我一直在使用 master 分支进行开发,并希望将其清除为只有发布提交,以及它的用途。如何将所有内容从 master 复制到开发分支,然后重新启动 master? 最佳答案 Create develo
两周前,我创建了一个新分支,我们称它为exp。在此期间,exp 和 master 中都有几次提交。在此期间,exp 尚未更新 master 的更改 现在我想把所有从 exp 到 master 的更改都
我克隆:https://github.com/vy2014/git_lesson.git 然后我做了一些改动,尝试通过命令git push推送到远程服务器,但是错误: Counting objects
有没有好的方法来解释如何在 Git 中解决“![rejected] master -> master (fetch first)'”? 当我使用此命令时 $ git push origin maste
我该怎么办: 1)恢复推送到主(远程)的更改 2)将这些更改移动到单独的分支 3) 稍后将这些更改移回 master 最佳答案 首先做 2),但前提是你真的需要分支。 git branch chang
符号上有什么区别? 在我的一个工作站上,我克隆的 git 存储库显示(master),而另一个工作站则显示(master -> origin) 我还创建了一个新的本地存储库,提交了一个文本文件,提示仍
我是一名优秀的程序员,十分优秀!