n個のコミットがある場合、n-3コミットからどのように分岐できますか?
すべてのコミットのハッシュを見ることができます。
ハッシュを介してブランチを作成できます。
git branch branchname <sha1-of-commit>
または、シンボリックリファレンスを使用します。
git branch branchname HEAD~3
ブランチの作成時にブランチをチェックアウトするには、次を使用します。
git checkout -b branchname <sha1-of-commit or HEAD~3>
github.comでこれを行うには:
魔法はgitresetで実行できます。
新しいブランチを作成してそれに切り替えます(最新のコミットはすべてここに保存されます)
git checkout -b your_new_branch
以前の作業ブランチに切り替えます(マスターであると想定します)
git checkout master
最新のxコミットを削除し、マスターをクリーンに保ちます
git reset --hard HEAD~x # in your case, x = 3
この時点から、最新のxコミットはすべて新しいブランチにのみ存在し、以前の作業ブランチ(マスター)には存在しなくなります。
事前にどのコミットから分岐したいかわからない場合は、コミットをチェックアウトして、コードを調べることができます(ソース、コンパイル、テストを参照)。
git checkout <sha1-of-commit>
分岐したいコミットを見つけたら、通常の方法で分岐を作成するだけで、コミット内から(つまり、最初にマスターに戻らずに)それを実行できます。
git checkout -b <branch_name>
単に実行します:
git checkout -b branch-name <commit>
例えば :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
パラメータを指定したcheckout
コマンドは-b
、新しいブランチを作成し、それに切り替えます
git checkout -b <branch-name> <sha1-of-commit>
これにより、次の1つのコマンドでブランチが作成されます。
git push origin <sha1-of-commit>:refs/heads/<branch-name>
すぐにブランチを作成するので、上記で公開した方法よりもこの方法の方が適しています(後で追加のプッシュコマンドを必要としません)。
--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>]
ゴブルデグック。
後続のテキストで「コミット」という単語を検索します。私たちはこれを見つけます:
<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>]
そして完了。
これは私がしたことです:
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
wasとoldcommitはmaster
ブランチに属しています。
Eclipseでこれを行うには:
ローカルブランチが作成されます。その後、変更をプッシュするたびに、ブランチがリモートサーバーにプッシュされます。
私はそのようにそれをすることができました:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
スキップ値を入力する必要がある場所。0は最新、1は前、2はその前のコミットなどです。
あなたはスタッシュでそれを行うことができます。
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
状態の場合、gitresetは移動するだけHEAD
です。ブランチをリセットするには、最初にそれをチェックアウトします。
gitresetとgitcheckoutの違いについてもっと知りたい場合は、公式のgitブログを読むことをお勧めします。
コマンドラインベースのソリューションを探している場合は、私の答えを無視してかまいません。GitKrakenの使用をお勧めします。これは並外れたgitUIクライアントです。ホームページにGitツリーが表示されます。それらを見るだけで、プロジェクトで何が起こっているのかを知ることができます。特定のコミットを選択し、それを右クリックして、[ここにブランチを作成する]オプションを選択するだけです。ブランチ名を入力するためのテキストボックスが表示されます。ブランチ名を入力し、「OK」を選択すると設定されます。とても使いやすいです。
Git Gui(GIT for Windowsに付属)を使用しました。
非常に単純なソースツリーを使用する場合。