- 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 有一段时间了,但尽管在博客和教程上花了很多时间,但我仍然无法理解某些功能...:) 我正在与其他人合作一个项目,我的老板为此在 bitBucket 上创建了一个存储库。 我在本地克隆了
有时我会遇到以下问题: 在功能分支中添加一些提交。 从上游更新 master。 想要查看功能分支和 master 之间的差异,但是 git diff master 显示了在 master 中添加/删除
我使用的是 Gerrit 2.4.2 版。我有一个分支 master,我创建了一个名为 newbranch 的新分支。然后我将一些更改推送到远程(Gerrit 的)newbranch。在 Gerrit
假设我们有一个远程存储库并在本地克隆它。 我们 checkout master 分支,所以现在我们有本地 master 和一个 Remote remotes/origin/master . 然后我必须
我有一个项目,其中开发分支使用 CocoaPods,但其中一位开发人员决定删除它并改用 Carthage。 feature 分支使用的是 CocoaPods,因为它是在 develop 分支转换之前一
我有一个有问题的 master 分支需要调试。为此,我想插入一堆调试程序(例如,打印变量),查明错误并应用修复程序。稍后,我想将修复 merge 到 master 分支中,但我不想跳过调试更改。 #
我有一个 master 分支,我正在其中 push 我的最新开发。 现在在某个时候,我确实从 master 分支发布并创建了名为 release1 的新分支。 现在我在master分支上做新的开发 与
我正在尝试使我的一些标准工作流程自动化,我发现自己经常做的一件事是将对远程 master 分支的更改 merge 到我自己的本地分支并推送结果。 所以步骤如下: 转为大师 从远程 pull 更改 切换
使用 Gerrit 很容易意外地将开发分支中的不稳定代码 merge 到稳定分支中: $ git checkout develop $ commit $ git push origin HEAD:re
我有一个正在进行的项目,我正在雇用承包商来帮助我处理代码的某些部分。问题是我不想让任何一个承包商看到所有这些。 我可以在 GitHub 上为他们分配私有(private)存储库下的分支吗?这需要命令行
SVN 分支 Branch 选项会给开发者创建出另外一条线路。当有人希望开发进程分开成两条不同的线路时,这个选项会非常有用。我们先假设你已经发布了一个产品的 1.0 版本,你可能想创建一个新的分支,
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 2年前关闭。 Improve this
有没有办法从特定的修订版中创建(svn)分支, 因为我想跳过提交历史中的一些修订(在新分支中)。 例如,我有从 1 到 1590 的修订,我想创建一个新分支并跳过提交(从 1504 到 1574 )和
到目前为止我看到的所有 svn 分支的例子都是这样的 svn cp -m 'Making test branch' svn://svnrepo/hellosite svn://svnrepo/hell
当我尝试使用 Sonar 扫描仪分析我的项目时,扫描失败并显示以下错误消息: Caused by: Branch does not exist on server: develop 显然,这只发生在它
在我的 Mercurial 存储库中,不知何故,有人输入了空白分支名称: 如果我hg id -r 2004,我确实得到空白文本。现在的问题是,这会导致我们的Redmine安装出现问题,因为它无法同步存
我有以下代码片段: srcaddr >= inet_ntoa . fromJust dstaddr >= inet_ntoa . fromJust -- I want to perform actio
在我的项目中,我有用于工作的本地分支和网络驱动器上的分支我在本地一号和网络一号之间做了“绑定(bind)分支”我的想法是使用绑定(bind)选项自动备份每个本地提交。 我在本地分支提交文件后,我在网络
我想创建一个脚本,根据变量的状态使用不同的表和命令执行不同的操作。在 T-SQL 中,我会这样做: DECLARE @whatToDo INT = 1; IF @whatToDo = 1 BEGIN
Write a program that reads input up to # and reports the number of times that the sequence ei occurs
我是一名优秀的程序员,十分优秀!