【发布时间】:2011-02-18 11:47:34
【问题描述】:
如果我有 n 次提交,我如何从 n-3 次提交中分支?
我可以看到每个提交的哈希值。
【问题讨论】:
标签: git branch git-branch
如果我有 n 次提交,我如何从 n-3 次提交中分支?
我可以看到每个提交的哈希值。
【问题讨论】:
标签: git branch git-branch
您可以通过哈希创建分支:
git branch branchname <sha1-of-commit>
或者通过使用符号引用:
git branch branchname HEAD~3
要在创建分支时检查分支,请使用
git checkout -b branchname <sha1-of-commit or HEAD~3>
【讨论】:
git push origin BRANCH_NAME
<sha1-of-commit>开始一个分支运行git checkout -b <name-of-branch> <sha1-of-commit>但是如果分支已经存在git checkout -B <name-of-branch> <sha1-of-commit>
git branch branchname HEAD^^^
我可以这样做:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
您必须在此处输入跳过值。 0 是最新的,1 是以前的,2 是之前的提交,等等。
【讨论】:
HEAD~1(其中 1 指定 1 次提交)?
在 Eclipse 中执行此操作:
它将为您创建一个本地分支。然后,每当您推送更改时,您的分支都会被推送到远程服务器。
【讨论】:
在 github.com 上执行此操作:
【讨论】:
如果您不确定要提前从哪个提交分支,您可以通过以下方式检查提交并检查其代码(参见源代码、编译、测试)
git checkout <sha1-of-commit>
一旦你找到了你想要分支的提交,你就可以在提交中做到这一点(即无需先回到主节点),只需以通常的方式创建一个分支:
git checkout -b <branch_name>
【讨论】:
git reset可以做到这一点。
创建一个新分支并切换到它(因此您所有的最新提交都存储在这里)
git checkout -b your_new_branch
切换回之前的工作分支(假设它是主分支)
git checkout master
删除最新的 x 提交,保持 master 干净
git reset --hard HEAD~x # in your case, x = 3
从现在开始,所有最新的 x 提交都只在新分支中,不再在您之前的工作分支(master)中。
【讨论】:
git reset --hard 不是一个好主意,如果您已经将提交推送到原点...
git push --force
一个很好的相关问题是:你到底是如何使用 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.
我们正在取得进展!
现在,专注于 gobbledegook 的这一行:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
浓缩成这样:
git branch <branchname> [<start-point>]
完成了。
【讨论】:
你可以在 Stash 中做到这一点。
【讨论】:
git checkout -b <branch-name> <sha1-of-commit>
【讨论】:
git branch branchname <sha1-of-commit>”(来自已接受的答案)有何不同?
git checkout -b 来创建一个新的分支。
这就是我所做的:
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 是属于 master 分支的旧提交。
【讨论】:
转到 git 存储库的特定提交
有时在处理 git 存储库时,您希望返回到特定提交(修订)以在特定时间获得项目的快照。为此,您需要提交的 SHA-1 哈希,您可以使用以下命令轻松找到检查日志:
git log --abbrev-commit --pretty=oneline
这将为您提供所有提交的紧凑列表和 SHA-1 哈希的简短版本。
现在您知道要执行的提交的哈希值,您可以使用以下 2 个命令之一:
git checkout HASH
或
git reset --hard HASH
结帐
git checkout <commit> <paths>
告诉 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 reset 和 git checkout 之间的区别,我建议您阅读the official git blog。
【讨论】:
git log --abbrev-commit --pretty=oneline 可以缩写为git log --oneline
【讨论】:
简单运行:
git checkout -b branch-name <commit>
例如:
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
带有参数-b 的checkout 命令将创建一个新分支并且它会将您切换到该分支
【讨论】:
git fetch & git branch 命令,然后检查功能分支是否存在,如果是这种情况,那么是的,当然你将无法创建分支从已删除的分支中,您还可以在分支消失的情况下恢复分支删除
如果您使用非常简单的源代码树。
【讨论】:
这使用一个命令创建分支:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
我更喜欢这种方式而不是上面发布的方式,因为它会立即创建分支(之后不需要额外的推送命令)。
【讨论】:
如果您正在寻找基于命令行的解决方案,您可以忽略我的回答。 我会建议你使用GitKraken。这是一个非凡的 git UI 客户端。它在主页上显示了 Git 树。您只需查看它们就可以了解项目的进展情况。只需选择一个特定的提交,右键单击它并选择“在此处创建分支”选项。它会给你一个文本框来输入分支名称。输入分支名称,选择“确定”即可。它真的很容易使用。
【讨论】: