1

几个月前我开始使用 Git,我想要一个 GUI 客户端,所以我使用SmartGit,我觉得它很棒。

唯一的事情是,当我尝试回到以前的提交时,我会感到非常困惑;例如,最近我发现了一个在我的项目中未被发现的错误。我在 SmartGit 中使用了branch>>checkout来更改为早期版本。这工作得很好,但是 SmartGit 建议我应该切换到本地分支来检查提交。我对此有几个问题(见下文),但我的主要问题是,当我阅读每个文档时,他们似乎在说些稍微不同的事情。Git的文档似乎说“结帐”是为了

检查到工作树的分支或路径

smartgit 说你使用结帐来

将工作树切换到某个提交

  • 那么它们是两种不同的东西(即结帐一词的不同用法)吗?如果不是,为什么一个指分支而另一个指提交?
  • 如果我想移动到同一分支中的较早提交,它是如何工作的?
  • 为什么 smartgit 建议我为此启动一个新分支,这很重要吗?
  • 如果我必须每次都建立一个新的分支,那么我应该为此建立一个特殊的分支,这样我就不会得到很多随机分支吗?
  • 本地分支建议中“本地”的含义是什么,为什么它必须是本地的,这是否意味着它应该与我的 bitbucket 帐户同步?
4

1 回答 1

3

我不使用 smartgit,但这些描述是等价的。

分支混乱

git 中的分支只是指向提交的指针。因此,当您签出一个分支时,您正在将您的工作副本更新为一个特定的提交(它只是有一个好听的名字,比如“master”)。

如果你想检查一个提交(它在你的回购历史中的位置并不重要) - 你可以通过哈希检查它。如果您只是检查它以环顾四周,那么没有必要创建一个新分支。但是,根据您正在做的事情,这样做可能是个好主意。您可以在签出提交之前或之后执行此操作 - 至少是 git - 没关系。

如果您使用 git 的 cli 执行操作,您会看到如下内容:

(master) $ git checkout c5d12604219ac1d6fa0f7d8ff4be98c8a3eee0da
Note: checking out 'c5d12604219ac1d6fa0f7d8ff4be98c8a3eee0da'.

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.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at c5d1260... Added CakeResponse::file() for serving files as response
((no branch))]$

即 git 还会通过示例命令提示您选择为您签出的提交创建一个分支并解释原因(以保留您创建的提交)。

当地分支机构

本地分支仅表示存在于本地工作副本中的分支(它出现在 .git/config 中,当你这样做时它会出现git branch)。本地分支可能有也可能没有上游远程分支(可能有也可能没有要推送的东西)——这是你的选择,不影响分支是否是本地的——它在你的仓库中定义,因此它是本地的.

于 2012-07-16T16:56:17.873 回答