如果我有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 branch new_branch_name `git log -n 1 --skip 3 --format=%H`
必须在其中输入跳过值。0是最新的,1是先前的,2是之前的提交,等等。
要在Eclipse中执行此操作:
转到“Git存储库探索”透视图。展开“标记”并选择要从中创建分支的提交。右键单击提交并选择“创建分支”。提供分支名称。
它将为您创建一个本地分支。然后,每当您推送更改时,您的分支将被推送到远程服务器。
要在github.com上执行此操作:
转到您的项目。单击“提交”。单击要从中分支的提交上的<>(“浏览历史记录中此时的存储库”)。单击左上方的“树:xxxxxx”。就在语言统计栏下方,您将看到“查找或创建分支”选项(只需在那里键入新的分支名称)
如果您不确定要提前从哪个提交分支,可以检查提交并检查其代码(参见源代码、编译、测试)
git checkout <sha1-of-commit>
一旦找到了要从中分支的提交,就可以在提交中(即,不必先返回到主提交),只需按通常的方式创建一个分支:
git checkout -b <branch_name>
魔法可以通过git重置来实现。
创建一个新的分支并切换到它(因此所有最新的提交都存储在这里)git结帐-b your_new_branch切换回以前的工作分支(假设它是主分支)切换到主分支删除最新的x个提交,保持master干净git reset--hard HEAD~x#在您的情况下,x=3
从这一刻起,所有最新的x提交都只在新分支中,不再在上一个工作分支(master)中。
一个很好的相关问题是:你怎么用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 repo上快速执行此操作的方法如下:
从分支机构查找特定提交在SHA id旁边,单击“浏览历史记录中此时的回购”在这里,您可以从此提交创建一个新分支
这是我所做的:
C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'
C:\Users\jaimemontoya\[path]\app>git branch
master
* responsivenavigation
在本例中,8a75b001096536b3216022484af3026aa9c7bb5b是属于主分支的旧提交。
转到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官方博客。
只需运行:
git checkout -b branch-name <commit>
例如:
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
带有参数-b的checkout命令将创建一个新分支,并将您切换到该分支
这将使用一个命令创建分支:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
我更喜欢这种方式,因为它会立即创建分支(之后不需要额外的push命令)。
如果您正在寻找基于命令行的解决方案,可以忽略我的答案。我建议你使用GitKraken。这是一个非凡的git UI客户端。它在主页上显示Git树。你可以看看他们,知道项目的进展。只需选择一个特定的提交,右键单击它并选择“在此处创建分支”选项。它将提供一个文本框,用于输入分支名称。输入分支名称,选择“确定”,即可设置。它真的很容易使用。
使用Sourcetree|最简单的方法。
首先,签出要进行特定提交以创建新分支的分支。然后查看工具栏,选择Repository>Branch。。。快捷方式是Command+Shift+B。然后选择要执行的特定提交。并给出一个新的分支名称,然后创建一个分支!
我使用了Git-Gui(随Git for Windows提供)。
在菜单栏上,打开分支菜单并选择创建。。。在“分支名称”部分中指定新分支的名称在StartRevision部分中选择RevisionExpression:并输入提交ID(我刚刚使用了VisualStudio中的8位ID,它起了作用)
使用源树[当前使用的版本:3.1.3]
在源树中打开历史记录
它将在主窗口中列出所有提交右键单击所需的提交,然后单击分支。。。选项在新窗口中为分支指定名称,然后单击“创建分支”。新的分支(系统本地)将与其他现有分支一起出现在左侧,您可以将其推到源位置以将其放到存储库中,这样其他用户就可以使用它。
还没人提到git开关?
您可以执行以下操作:
git checkout<commit hash>
或使用符号引用:
git结帐头~3
然后:
git开关-c我的新功能分支
推荐文章
- Bower: ENOGIT Git未安装或不在PATH中
- Bitbucket上的Git:总是要求密码,即使上传了我的公共SSH密钥
- Git别名-多个命令和参数
- 如何添加一个“打开git-bash这里…”上下文菜单到windows资源管理器?
- 是否可以在Git中只提取一个文件?
- 当我做“git diff”的时候,我怎么能得到一个并排的diff ?
- 在git中如何将提交移动到暂存区?
- 如何缩小。git文件夹
- 如何在本地删除分支?
- 找到包含特定提交的合并提交
- Windows上Git文件的权限
- 如何从一个枝头摘到另一个枝头
- 如何获得在两次Git提交之间更改的所有文件的列表?
- 什么是跟踪分支?
- 如何在不稳定的连接上完成一个大项目的git克隆?