Answers:
您可以通过哈希创建分支:
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>
要在github.com上执行此操作:
魔术可以通过git reset来完成。
创建一个新分支并切换到该分支(因此所有最新提交都存储在此处)
git checkout -b your_new_branch
切换回上一个工作分支(假设它是主分支)
git checkout master
删除最新的x提交,保持主数据干净
git reset --hard HEAD~x # in your case, x = 3
从这一刻起,所有最新的x提交都仅在新分支中,而不再在先前的工作分支(主节点)中。
git reset --hard
如果您已经将提交推向原点,那么这不是一个好主意...
git push --force
如果您之前已经推动过分支机构,那么可以
git checkout -b <branch-name> <sha1-of-commit>
git branch branchname <sha1-of-commit>
”(已接受的答案)有何不同?
git checkout -b
用来创建一个新的分支。
只需运行:
git checkout -b branch-name <commit>
例如 :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
checkout
带有参数的命令-b
将创建一个新分支,并将您切换到该分支
git fetch
&git branch
命令,然后检查功能分支是否存在,如果是这种情况,那么是的,当然,您将无法从已删除的分支创建分支,如果出现这种情况,还可以还原分支删除分支不见了
一个很好的相关问题是:您如何使用--help
git选项解决这个问题?让我们尝试一下:
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 branch new_branch_name `git log -n 1 --skip 3 --format=%H`
您必须在其中输入跳过值的地方。0是最新的,1是前一个,2是在此之前的提交,依此类推。
HEAD~1
(其中1表示1次提交)?
这将使用一个命令创建分支:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
与上面发布的方法相比,我更喜欢这种方法,因为它可以立即创建分支(此后不需要额外的push命令)。
使用Sourcetree | 最简单的方法。
这是我所做的:
C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'
C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
master
* responsivenavigation
在这种情况下,8a75b001096536b3216022484af3026aa9c7bb5b
was和old提交属于该master
分支。
转到git仓库的特定提交
有时在git存储库上工作时,您想返回到特定的提交(修订)以在特定的时间获得项目的快照。为此,您只需要提交的SHA-1哈希即可,您可以使用以下命令轻松地检查日志:
git log --abbrev-commit --pretty=oneline
这将为您提供所有提交的简要列表以及SHA-1哈希的简短版本。
现在,您知道要提交的哈希值,您可以使用以下两个命令之一:
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之间的区别,我建议您阅读git官方博客。
git log --abbrev-commit --pretty=oneline
可以缩写为git log --oneline
在Visual Studio 2015和2017中执行可接受的答案:
点击更改(上方红色箭头)
单击“操作”(上方的红色箭头),然后单击“下拉菜单”上的“查看历史记录”
新的标签页将打开:
选择签出一个新的分支,瞧瞧!
下面,虽然不是OP问题的一部分,但是我做了很多事情,而且这是一个技巧步骤,至少对我来说是这样:如果您想还原到先前的提交,而不签出新的分支,请不要选择revert(! ?); 您应该选择重新定义--mixed或--hard: