- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是使用Git的新手,我从GitHub克隆了一个分支,并在键入git branch
时显示了所有分支。完成工作后,我将其成功推送到新分支。之后,我将该文件夹复制到另一个目录(因为我想进行备份以避免冲突),输入该文件,然后键入git branch
。仅显示3个分支,知道我在Github上有4个分支。
我试图通过将分支克隆到新文件夹(类型为git clone -b <branch-name> <repo-link-https>
)中来解决此问题,现在仅出现我克隆的分支。
有什么建议吗?
最佳答案
克隆现有存储库时,您的Git会创建一个新的不同的存储库,并将所有提交(而不是原始存储库的任何分支)复制到此新存储库中。 git clone
的最后一步是创建一个分支。此分支名称是您的,而不是他们的;它的拼写与他们的名字之一相同。
当您使用克隆(一个不同的存储库)时,可以向它添加越来越多的分支。如果将原始存储库中所有相同的分支添加到其中,那么您现在将拥有其所有提交和所有分支名称(请注意,作为您自己的分支)。但是直到那时,您才可以拥有他们的所有提交。很好,因为Git与分支无关。 Git是关于提交的。
1确切的描述要比这复杂得多,但是将其视为“复制他们的所有提交而没有他们的分支”将使您入门。
I tried to solve the issue by cloning the branch inside a new folder (typed
git clone -b
) and now only the branch that I cloned is appearing..
git clone
命令的最后一步是运行一个
git checkout
或
git switch
command2分支。
-b
标志存在,因此您可以在最后一步中告诉Git复制哪个分支名称。如果您省略
-b
标志,则您的Git会询问他们的Git存储库(您正在克隆的一个),并建议他们选择哪个分支。但是,无论哪种方式,您只会获得一个分支。
git clone
过程结束时使用一个名字的原因。您输入的每个名称都会给您带来更多好处。
git switch
命令首先在Git版本2.23中添加,以将过于复杂的
git checkout
命令拆分为两个单独的命令
git switch
和
git restore
。现有的
git checkout
保留;您可以使用它代替两个新的,更简单的命令。不过,新的简化命令在某种意义上更安全:
git switch
命令尝试非常安全,它复制的一半
git checkout
也是如此。但是,
git restore
命令是故意不安全的,因为它将不可避免地破坏工作。它复制了
git checkout
的另一半。因此,如果您使用
git checkout
,当您认为自己正在调用“安全地做事”的一半时,可能会意外地调用“破坏我的工作”的一半。
e31aba42fb12bdeb0f850829e008e1e3f43af500
(这是Git本身在Git存储库中的实际提交)。
git show e31aba42fb12bdeb0f850829e008e1e3f43af500
将显示它。通常,您可以将数字缩写,如果没有歧义的话,可以缩写为最小的前四个字符,因此,如果您具有用于Git的Git存储库的克隆,
git show e31aba42fb12bdeb0f850829e008
几乎可以保证正常工作。但是
git show e31a
并非如此,因为例如对于此提交或对于
e31a17f741...
来说,它可能很短。尽管
e31ab
今天可以工作,但是随着更多提交的添加,它可能会停止工作。
A
,下一个将是
B
,第三个提交是commit
C
:
A <-B <-C
由于commit
C
是最后一个,因此它在元数据中具有更早的commit
B
的哈希ID。我们说
C
指向
B
。同样,将
B
指向
A
。由于
A
是有史以来的第一个提交,因此它缺少此向后箭头:它没有指向任何地方。 Git将此称为根提交。这是我们停止向后工作的地方。
C
与快照
B
进行比较,因为commit
C
拥有commit
B
的哈希ID。因此,Git可以提取两个提交。此外,由于Git可以对文件进行重复数据删除,因此Git可以立即知道(甚至不费解费)重复的文件。 Git只需要提取和比较不同的文件。 Git将做到这一点,并将构建一组更改,将旧文件转换为新文件。这就是Git向您显示的内容:这套说明。
main
,它标识最后一次提交:
A--B--C <-- main
在这里,我们只是想知道
C
这个名字为我们所做的,而不是想记住
main
的哈希ID。因此,不管它具有什么哈希ID,
git checkout main
(2.23之前的Git版本)或
git switch main
(2.23和更高版本)都会为我们提供最新的提交(当前为
C
)。
C
:
A--B--C <-- main, dev
现在我们还需要做一件事:我们使用以下哪个名称?现在,这无关紧要,因为两个名称都选择commit
C
。但是,让我们将特殊名称
HEAD
附加到两个分支名称之一中,如下所示:
A--B--C <-- main (HEAD), dev
如果我们使用
git switch dev
,则将特殊名称
HEAD
重新附加到名称
dev
,如下所示:
A--B--C <-- main, dev (HEAD)
现在让我们进行一次新的提交。不用担心我们如何进行新的提交,我们只需假设已完成所有操作即可。这个新的提交
D
必然会指向现有的提交
C
,因为我们是从
D
生成
C
的。所以看起来像这样:
A--B--C
\
D
但是
D
现在是最新的提交,因此Git必须更新名称。应该更新哪个名字?答案很明确:应该更新
HEAD
所附加的内容:
A--B--C <-- main
\
D <-- dev (HEAD)
现在,我们有两个分支名称,这两个名称指定了两个不同的“最新”提交。关于
main
的最新提交是
C
,关于
dev
的最新提交是
D
。提交
D
指向提交
C
,指向
B
,指向
A
;因此,所有四个提交都在
dev
分支上,而其中三个提交在
main
上。
main
并在那里进行新的提交,则会得到:
E <-- main (HEAD)
/
A--B--C
\
D <-- dev
这意味着我们现在在两个分支上共享三个提交,一个提交仅在
main
上,一个提交仅在
dev
上。现在我们需要
和这两个名称才能找到所有五个提交。一个名称将找到一个提交,该名称将找到三个共享的提交,但是我们需要另一个名称来找到最后剩余的提交。
HEAD
的任何分支名称都会自动移动以包含新的提交。所有其他分支名称都保留在该位置,但是由于它们是我们的分支名称,因此我们处于控制之中。我们可以随时让Git移动这些名称。唯一的限制是我们必须提交将名称移至的提交。
main
和
dev
分别提交了
E
和
D
。现在,我们创建一个新的存储库,在其中复制所有五个提交,从而为我们提供:
E
/
A--B--C
\
D
实际上,我们确实需要两个名称来查找所有提交。但是我们不需要
分支名称。另一个与其他存储库一起使用的Git具有分支名称,因为这些是他的分支,在进行新的提交时,他将四处移动。因此,我们的Git要做的是复制它们的名称,但更改它们。我们让Git取其分支名称,并通过在名称中添加一些内容(通常是
origin/
)来创建我们的远程跟踪名称。5因此,我们得到:
E <-- origin/main
/
A--B--C
\
D <-- origin/dev
Git将拒绝将特殊名称
HEAD
附加到这些远程跟踪名称之一中。
HEAD
仅允许附加到分支名称。因此,我们的
git clone
的最后一步是使用
-b
选项或他们的建议来选择这两个名称之一,并从中创建一个分支名称,如下所示:
E <-- main (HEAD), origin/main
/
A--B--C
\
D <-- origin/dev
请注意,我们的分支名称选择的提交与
git clone
从其分支名称进行的远程跟踪名称相同。但是我们现在只有一个分支名称,而没有两个。如果我们运行:
git switch dev
这使用了Git提供的特殊功能,该功能可以找到其
origin/dev
并创建我们自己的新名称
dev
:
E <-- main, origin/main
/
A--B--C
\
D <-- dev (HEAD), origin/dev
现在我们有两个分支名称。但是我们最初不是。请注意,我们现在还 checkout 了
D
提交,而不是
E
,因为
git switch
(或
git checkout
,如果使用的话)不仅会切换分支,还会选择分支名称标识的提交作为要提交的提交。已 checkout ,因此可供我们使用。
origin/
,还用
refs/heads/
替换了
refs/remotes/origin/
。名称
origin
实际上是一个远程对象,我们在Git存储库中可以有任意多个远程对象。但这是另一个问题的话题。
关于git - Git分支未显示所有分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64838274/
我时不时地输入“git”,然后想到别的东西,然后输入例如“git checkout master”。当然,这给我留下了 $ git git checkout master git: 'git' is
我做到了 git 克隆 git://foo.git 光盘富 ...编辑文件.. 现在我想重新开始。我不在乎我已经做出的任何改变,但我不想再次克隆整个巨型 foo.git,只是丢失我所有的更改。我怎
我在我的电脑上开发代码,我的计算节点很少。 为了让我的程序保持同步,我决定使用 git。以前,我以一种单向模式使用它来“下推”从 PC 到计算节点的更改。但是时不时遇到计算节点特有的小bug,现场修复
虽然它似乎什么也没做,但它没有给出任何警告或错误消息。有什么想法吗? 最佳答案 来自 Git 源的注释: /* * Read a directory tree. We currently ignor
我知道如何为这样的 HTTPS 请求提供用户名和密码: git clone https://username:password@remote 但我想知道如何像这样向 Remote 提供用户名和密码:
Git GUI、Git Bash 和 Git CMD 之间有什么区别?我是初学者,为了进行安装,我发现自己通常同时使用 git bash 和 git CMD 最佳答案 Git CMD 就像使用 git
有人能告诉我git中文件索引被删除是什么意思吗?这些文件在我的 VS Code 中标记为红色,但我仍然可以修改文件并将更改推送到将反射(reflect)这些更改的远程存储库。我认为这一切都是在我使用命
我通过 git 子树将 GLFV 库添加到项目中,但出现此警告“看起来您的 git 安装或您的 git-subtree 安装已损坏”。还描述了几个原因,为什么这可能是: 如 git --exec-pa
我有需要外部 git 项目的 repo,但我不想使用子模块,因为我想在 github 上存档所有文件,所以我认为我只是将具有 git repo 的整个目录添加到 git 但它不t 添加里面的 .git
我有需要外部 git 项目的 repo,但我不想使用子模块,因为我想在 github 上存档所有文件,所以我认为我只是将具有 git repo 的整个目录添加到 git 但它不t 添加里面的 .git
我一直在阅读一篇文章,作者在其中指示:在现有存储库中创建一个新存储库,并想知道这是否是他忽略的错误。稍后我会与他核实。 这些是我要检查的条件: 将现有目录制作成仓库的条件,并且已经 checkin 主
我确实在不同的计算机上处理相同的项目,我想知道是否有一种方法可以跟踪该 .git 文件夹,这样我就不必在所有本地文件中重新配置配置文件。 我将所有工作推送到 bitbucket。 最佳答案 不,没
这个问题在这里已经有了答案: How does git store files? (3 个答案) 关闭 9 年前。 我为我的许多项目创建了一个远程存储库,所以它是我的push 的目的地。与 git
应该如何在 git 中查看文件内容的完整历史记录? 一个文件在 git 中的历史很短,存储库通过 git-svn 同步,但在 svn 中的历史很长。 git 中的历史记录到达文件移动的位置。要查看历史
我是confused here ... 如何对修改后的文件进行git commit,以及如何对新文件进行git commit? 还有,你如何在git中单独提交文件? 最佳答案 git 提交过程分为两个
正在搜索 throw SO 来寻找答案。遇到这个似乎没有给出任何答案的旧线程。重新触发此线程,希望有人知道! 有人能告诉我 git subtree 和 git filter-branch 的区别吗?为
我想知道是否有一种方法可以避免在每个 Git 命令的开头键入单词 git。 如果有一种方法可以在打开命令提示符进入 “Git 模式” 后只使用一次 git 命令就好了。 例如: git> 之后,我们键
当您修改工作目录中的文件时,git 会告诉您使用“git add”暂存。 当您向工作目录添加新文件时,git 会告诉您使用“git add”开始跟踪。 我对这两个概念有点困惑,因为我假设跟踪文件的更改
为什么 git://有效 $ git clone git://github.com/schacon/grit.git Cloning into 'grit'... ... Checking conne
我在以下沙箱中练习 git:https://learngitbranching.js.org/?NODEMO 我在两个单独的 session 中运行了两组命令。第一组命令顺序如下: git clone
我是一名优秀的程序员,十分优秀!