如果我有N个提交,我如何从N-3个提交分支?


当前回答

使用提交哈希创建分支:

git branch branch_name <commit-hash>

或使用符号引用:

git branch branch_name HEAD~3

要在创建分支时签出分支,请使用:

git checkout -b branch_name <commit-hash or HEAD~3>

其他回答

我使用了Git-Gui(随Git for Windows提供)。

在菜单栏上,打开分支菜单并选择创建。。。在“分支名称”部分中指定新分支的名称在StartRevision部分中选择RevisionExpression:并输入提交ID(我刚刚使用了VisualStudio中的8位ID,它起了作用)

如果您使用的是非常直接的源代码树。

右键单击需要从中创建新分支的提交单击“分支”在对话框中键入新分支的名称,然后单击“创建分支”

一个很好的相关问题是:你怎么用git的--help选项来解决这个问题?让我们试试看:

git branch --help

我们看到这样的输出:

NAME
       git-branch - List, create, or delete branches    

SYNOPSIS
       git branch [--color[=<when>] | --no-color] [-r | -a]
               [--list] [-v [--abbrev=<length> | --no-abbrev]]
               [--column[=<options>] | --no-column]
               [(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
               [--points-at <object>] [<pattern>...]
       git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
       git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
       git branch --unset-upstream [<branchname>]
       git branch (-m | -M) [<oldbranch>] <newbranch>
       git branch (-d | -D) [-r] <branchname>...
       git branch --edit-description [<branchname>]

Gobbledegook。

在随后的文本中搜索单词“commit”。我们发现:

   <start-point>
       The new branch head will point to this commit. It may be given as a branch name, a
       commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.

我们正在前进!

现在,关注这一行官样文章:

git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]

将其概括为:

git branch <branchname> [<start-point>]

完成了。

使用GitHub Desktop,显示历史窗格,右键单击所需的提交,然后选择菜单项“从提交创建分支”。

转到git存储库的特定提交

有时,在处理git存储库时,您希望返回到特定的提交(修订),以便在特定的时间获得项目的快照。要做到这一点,您需要提交的SHA-1哈希,您可以使用以下命令轻松查看日志:

git log --abbrev-commit --pretty=oneline

这将为您提供所有提交和SHA-1哈希的简短版本的紧凑列表。

现在您知道了要转到的提交的哈希值,可以使用以下2个命令之一:

git checkout HASH

or

git reset --hard HASH

结账

git checkout<commit><path>

告诉git将路径的当前状态替换为给定提交中的状态。路径可以是文件或目录。

如果没有给出分支,git将接受HEAD提交。

git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.

如果没有给定路径,git将HEAD移动到给定的提交(从而更改您正在进行的提交)。

git checkout branch //means switching branches.

重置

git reset <commit> //re-sets the current pointer to the given commit.

如果您在一个分支上(通常应该是),HEAD和这个分支将被移动到提交。

如果您处于分离HEAD状态,git reset只会移动HEAD。要重置分支,请首先检查它。

如果你想了解更多关于git重置和git结账的区别,我建议你阅读git官方博客。