git日志输出中的远程意味着什么?
又是一个黎明,又是一天,人们试图学习Git这一令人震惊的反直觉、充斥着行话的混乱。在本地开发服务器上运行命令git日志输出中的远程意味着什么?,git,github,cygwin,Git,Github,Cygwin,又是一个黎明,又是一天,人们试图学习Git这一令人震惊的反直觉、充斥着行话的混乱。在本地开发服务器上运行命令git log时,我得到以下输出: $ git log commit 07cfffea573a70a59b2be7a6ff8d7dee3e831e (HEAD -> master, live/master) Author: My Name <example@hotmail.com> Date: Mon Jul 6 17:02:16 2020 +0000 ma
git log
时,我得到以下输出:
$ git log
commit 07cfffea573a70a59b2be7a6ff8d7dee3e831e (HEAD -> master, live/master)
Author: My Name <example@hotmail.com>
Date: Mon Jul 6 17:02:16 2020 +0000
manual changes to functions.php permissions
commit 3f507d8211be744b1c5a997c81d13b77d968be (central/master)
Author: My Name <example@hotmail.com>
Date: Thu Mar 12 00:14:22 2020 +0000
Contact Form 7 update
commit 41c64ed4fbde1924557e7886901ab8078d088a
Author: My Name <example@hotmail.com>
Date: Wed Mar 11 19:11:53 2020 +0000
Added PHP error log for Contact Form 7
$git日志
提交07cfffea573a70a59b2be7a6ff8d7dee3e831e(主管->主管,现场/主管)
作者:我的名字
日期:星期一至七月六日17:02:16 2020+0000
手动更改functions.php权限
提交3f507d8211be744b1c5a997c81d13b77d968be(中央/主)
作者:我的名字
日期:2020年3月12日星期四00:14:22+0000
联络表格7更新
提交41c64ed4fbde1924557e7886901ab8078d088a
作者:我的名字
日期:3月11日星期三19:11:53 2020+0000
添加了联系人表单7的PHP错误日志
简单地说,那些遥控器到底意味着什么?我所发现的任何问题似乎都没有回答这个问题,只要看一下mangit日志
,就知道它不是为git初学者编写的
对我来说,输出似乎表明这些遥控器当前被卡在它们出现的相应提交上,但我知道这不可能,因为我已经将最新的提交从live
直接推送到central
(并在Github上确认已进行了更改)然而,central
仍然显示在旧提交的旁边
这里的遥控器到底意味着什么
简单地说,那些遥控器到底意味着什么
git log
输出中提交旁边的注释始终对应于您的local“refs”(即分支或标记)。这里,live/master
和central/master
是远程跟踪分支;您可以使用git-branch--remote
(简称-r
)列出这些代码
远程跟踪分支是本地引用,当您:
git push central master
应将当前签出分支上的新更改推送到central
远程设备上的master
分支,并更新refs/remotes/central/master
以指向当前分支的头部git fetch central master
将获取central
远程上的master
分支,并更新refs/remotes/central/master
。类似地,git fetch central
将获取central
远程服务器上的所有分支。由于git pull
在引擎盖下执行git fetch
操作,因此在拉动时也会更新远程跟踪分支关于Git手册页:对于初学者来说,有些确实不容易阅读。我建议您从以下资源开始:
- 阅读本手册有助于您更好地理解手册的其余部分
- TL;博士:对你的评论问题的回答是:
这是否意味着即使两个远程设备的内容相同(由于将一个远程设备的更改推送到另一个远程设备),我也必须从两个远程设备获取/拉取以保持本地存储库的最新状态
是“是的,您必须对每个远程设备运行
git fetch
”。您可能需要定义一组远程设备和/或运行git remote update
,该操作将对所有远程设备运行git fetch
。或者,git fetch--all
也会从所有远程设备更新。(group stuff为您提供了更大的控制;您可以使用git remote update group
来更新特定的远程组。)
长的
要理解这些东西,你需要意识到:
- Git存储库将提交(和其他Git对象)存储在一个数据库(通常是大数据库)中,将一些名称集(如分支名称、标记名称和远程跟踪名称)存储在第二个(通常小得多)数据库中
- 提交通过其哈希ID进行唯一编号,但具有相同提交的所有Git(即所有Git存储库)始终对这两个Git中100%相同的所有提交使用相同的哈希ID
- 分支名称(而不是任何其他名称)有一个特殊属性:根据定义,它们始终包含属于该分支的最后一次提交的原始哈希ID
- 为了实现上述所有功能,当您“打开”一个分支并进行新的提交时,Git会自动用新创建的提交的哈希ID替换分支名称中存储的哈希ID(它的散列ID以前从未出现在您自己的Git存储库中,也不会出现在任何其他Git存储库中,但将来每个获得提交的Git都会同意它是该提交的散列ID)
- 一般来说,会有一些例外情况,但我们暂时将这些情况放在一边,我们只会向存储库添加新的提交。这使我们更容易考虑各种情况,因此这是一种有益的简化
- 每个Git存储库通常独立于任何其他Git存储库
- 不过,偶尔您会将一个Git连接到另一个Git。当您连接到另一个Git时,一个Git会向另一个Git显示其部分或全部名称。这些是
和获取
操作。一个Git会向另一个Git提供两个Git之一还没有的提交集:推送
- 对于
,另一个git列出了它的名称和散列ID,而你的git得到了它还没有提交但想要/需要的提交git fetch
- 对于
,您的git列出了散列ID,另一个git会根据需要获取这些ID。然后您的git礼貌地请求(常规推送)或命令(强制推送)另一个git设置一些git push
... <-F <-G <-H <-- master
H [abandoned] / ... <-F <-G <-- master
git fetch alice
- 对于