使用Git从上一次提交分支

wi3ka0sx  于 2022-09-21  发布在  Git
关注(0)|答案(21)|浏览(355)

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

fae0ux8s

fae0ux8s1#

使用提交散列创建分支:

git branch branch_name <commit-hash>

或使用符号引用:

git branch branch_name HEAD~3

要在创建分支时将其 checkout ,请使用:

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

k5ifujac2#

要在githorb.com上做到这一点:

1.进入你的项目。
1.点击“提交”。
1.在您想要分支的提交上单击**<>**(“在历史中的这一点浏览存储库”)。
1.点击左上角的树:xxxxxx。在语言统计栏的正下方,您将看到“查找或创建分支”选项(只需在那里输入新的分支名称)

o0lyfsai

o0lyfsai3#

魔术可以通过Git重置来实现。

1.创建一个新的分支并切换到它(这样您所有的最新提交都存储在这里)

git checkout -b your_new_branch

1.切换回以前的工作分支(假设它是主分支)

git checkout master

1.删除最新的x提交,保持主机清洁

git reset --hard HEAD~x    # in your case, x = 3

从现在开始,所有最新的x提交只在新的分支中,而不再在您以前的工作分支(主)中。

14ifxucb

14ifxucb4#

如果您事先不确定要从哪个提交分支,您可以 checkout 提交并检查它们的代码(请参阅源代码、编译、测试)

git checkout <sha1-of-commit>

找到要分支的提交后,只需按常规方式创建分支,即可在提交中执行此操作(即,无需首先返回到主服务器):

git checkout -b <branch_name>
slhcrj9b

slhcrj9b5#

只需运行:

git checkout -b branch-name <commit>

例如:

git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8

带有参数-bcheckout命令将创建一个新分支并且它会将您切换到该分支

5ktev3wc

5ktev3wc6#

git checkout -b <branch-name> <sha1-of-commit>
8ulbf1ek

8ulbf1ek7#

这将使用一个命令创建分支:

git push origin <sha1-of-commit>:refs/heads/<branch-name>

与上面发布的方法相比,我更喜欢这种方式,因为它会立即创建分支(不需要在之后使用额外的PUSH命令)。

b4wnujal

b4wnujal8#

使用Sourcetree|最简单的方式。

  • 首先, checkout 您要进行特定提交以创建新分支的分支。
  • 然后查看工具栏,选择存储库>分支...快捷键是Command+Shift+B。
  • 并选择您要接受的特定承诺。并给出一个新的分支名称,然后创建一个分支!
lvmkulzt

lvmkulzt9#

这就是我所做的:

C:Users[path]build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'

C:Usersjaimemontoya[path]app>git branch
  master

* responsivenavigation

在本例中,8a75b001096536b3216022484af3026aa9c7bb5b是属于master分支的旧提交。

drkbr07n

drkbr07n10#

一个非常相关的问题是:你到底是如何使用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>]

胡说八道。

在随后的文本中搜索“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>]

完事了。

p1tboqfb

p1tboqfb11#

在您的Github回购上执行此操作的快捷方法如下:

  • 查找您的分支机构的具体提交
  • 在SHA ID旁边,单击“浏览历史中这一点的回购”
  • 在此处,您可以从此提交创建新分支
eh57zj3b

eh57zj3b12#

要在Eclipse中执行此操作,请执行以下操作:

  • 转至“Git存储库探索”透视。
  • 展开[标签],选择要创建分支的提交。
  • 在提交上单击鼠标右键并选择“创建分支”。
  • 提供分行名称。

它将为您创建一个本地分支机构。然后,每当您推送更改时,您的分支都会被推送到远程服务器。

wooyq4lh

wooyq4lh13#

你可以藏起来做这件事。

1.点击提交
1.在屏幕右上角,单击“标记此提交”
1.然后可以从刚刚创建的标签创建新的分支。

mi7gmzs6

mi7gmzs614#

我可以这样做:

git branch new_branch_name `git log -n 1 --skip 3 --format=%H`

您必须在其中输入跳过值。0是最新的,1是前一次,2是之前的提交,依此类推。

lvjbypge

lvjbypge15#

  • 转到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假定头提交。

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要重置分支,请先将其 checkout 。

如果你想更多地了解git重置和git结账之间的区别,我建议你阅读the official git blog

相关问题