web-dev-qa-db-ja.com

Gitを使った前回のコミットからの分岐

N個のコミットがある場合、どうすればn-3コミットから分岐できますか?

すべてのコミットのハッシュを見ることができます。

1471
dole doug

ハッシュを使ってブランチを作成することができます。

git branch branchname <sha1-of-commit>

あるいは、シンボリックリファレンスを使って:

git branch branchname HEAD~3

作成時にブランチをチェックアウトするには、

git checkout -b branchname <sha1-of-commit or HEAD~3>
2082
CB Bailey

Github.comでこれを行うには:

  1. あなたのプロジェクトに行きます。
  2. 「コミット」をクリックしてください。
  3. 分岐したいコミットの <> ( "履歴のこの時点でリポジトリを閲覧する")をクリックしてください。
  4. 左上の「tree:xxxxxx」をクリックしてください。言語統計バーのすぐ下に、「ブランチを検索または作成する」というオプションが表示されます(そこに新しいブランチ名を入力するだけです)。 Branch from previous commit
216
OneSolitaryNoob

魔法は git reset で行えます。

  1. 新しいブランチを作成してそれに切り替えます(だから最新のコミットはすべてここに保存されています)

    git checkout -b your_new_branch

  2. 以前の作業ブランチに切り替えます(マスターとします)。

    git checkout master

  3. 最新のx個のコミットを削除し、マスターをクリーンに保つ

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

これ以降、最新のxコミットはすべて新しいブランチにのみ存在し、以前の作業中のブランチ(マスター)には存在しなくなります。

67
Jing Li

どのコミットを前もって分岐させたいのかわからない場合は、コミットをチェックアウトしてそのコードを調べることができます(sourceを参照、コンパイル、テスト)。

git checkout <sha1-of-commit>

分岐したいコミットを見つけたら、通常の方法で分岐を作成するだけで、コミット内から(つまり、最初にマスターに戻ることなく)実行できます。

git checkout -b <branch_name>
62
stanm
git checkout -b <branch-name> <sha1-of-commit>
20
Tyler Long

Githubレポジトリでこれを実行する簡単な方法は次のとおりです。

  • あなたのブランチから特定のコミットを探す
  • SHA idの横にある[履歴のこの時点でリポジトリを参照]をクリックします。
  • ここであなたはこのコミットから新しいブランチを作ることができます enter image description here
9
Vatsal Parekh

Eclipseでこれを行うには:

  • 「Git Repository Exploring」パースペクティブに進みます。
  • 「タグ」を展開して、ブランチを作成したいコミットを選択します。
  • コミットを右クリックして "Create Branch"を選択してください。
  • ブランチ名を入力してください。

それはあなたのためのローカルブランチを作成します。変更をプッシュするたびに、ブランチはリモートサーバーにプッシュされます。

4
Saurabhcdt

あなたはStashでそれをすることができます。

  1. コミットをクリック
  2. 画面の右上にある[このコミットにタグを付ける]をクリックします。
  3. その後、作成したタグから新しいブランチを作成できます。
4
David Ruan

これに関連した素晴らしい質問は次のとおりです。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>]

そしてやった。

3
Purplejacket

私はそうすることができました:

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

スキップ値を入力する場所。 0が最新、1が前、2がその前のコミットなど.

3
Mike Graf

単に実行します。

git checkout -b branch-name <commit>

例えば ​​:

git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8

パラメータ-bを指定したcheckoutコマンドは、新しいブランチ _と_ を作成します。

2
d1jhoni1b

これは私がしたことです:

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

この場合、8a75b001096536b3216022484af3026aa9c7bb5bmasterブランチに属していた古いコミットでした。

1
Jaime Montoya

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とこのブランチはcommitに移動されます。

HEADがデタッチ状態にある場合、git resetはHEADを移動するだけです。 ブランチをリセットするには、まずそれをチェックしてください。

Git resetとgit checkoutの違いについてもっと知りたいなら、 公式gitブログ を読むことをお勧めします。

1
Lyes CHIOUKH

Select Commit

Git GUIユーザーの場合、(必要なら)すべての履歴を視覚化してから、分岐したいコミットを右クリックして分岐名を入力することができます。

Enter Branch name

Visualize all the history

0
user3070485

ソースツリーを使用する場合は、かなり簡単です。

  • 新しいブランチを作成する必要がある場所からコミットを右クリックします
  • 「ブランチ」をクリックします
  • ダイアログに新しいブランチの名前を入力し、「ブランチを作成」をクリックします
0
Ibtisam Asif

承認された回答をVisual Studio 2015および2017で実行するには

Click in alterations

変更箇所をクリック(上の赤い矢印)

Click Actions to View History

[アクション](上の赤い矢印)をクリックし、[ドロップダウン]メニューの[履歴の表示]をクリックします。

そして新しいタブが開きます。

History tab

そして、あなたはあなたのコードをあなたがあなたのコードに戻すことを望むという前のコミットを右クリックするべきです: right click the previous commit

新しいブランチをチェックアウトすることを選択してください。

以下は、OP質問の一部ではありませんが、私は両方ともやっていますが、これは少なくとも私にとってはトリックステップです。新しいブランチをチェックアウトせずに前のコミットに戻る場合は、revertを選択しないでください。 ;) --mixedまたは--hardを再定義してください。

right click the previous commit and redefine

0
Marcelo Scofano