質問
いgitリポジトリするようになります:
A -> B -> C -> D -> HEAD
また、本支店ポートするとこたいB、C、D、ヘッドがなくないヘッドの代名詞でもあA.
そうはいrebaseな適用から押しの変化と、元に戻す.い方が分からないに戻すには複数の犯?んに戻すには時間がない?が重要であるということですか。
解決
拡大に何を書いたコメント
一般のルールはしないように書き換え(変更)の歴史といい誰かがに基づく作業です。場合に書き換え(変更)の歴史は、まだ問題の統合の変更や更新します。
ようこのセクションの作成 新しいコミット る に戻すの変化 したいんです。これまでに使用 gitに戻る コマンドです。
あるいは,以下のように状況:
A <-- B <-- C <-- D <-- master <-- HEAD
矢印はこちらの方向にポインター:の"親"を参考にする為の、トップコミットの場合には支店を本社営業部(支店ref)の名店の場合には頭を参照)。
必要なもの作成は次の通りです:
A <-- B <-- C <-- D <-- [(BCD)^-1] <-- master <-- HEAD
場所"[(BCD)^-1]までのコミットするに戻す変化を確B、C、D数学り(BCD)^-1=D^-1C^-1B^-1というのが当たり前で、必要な状況は以下のコマンド:
$ git revert --no-commit D
$ git revert --no-commit C
$ git revert --no-commit B
$ git commit -m "the commit message"
交互いることでしょう 精算 内容 の犯、犯この状態:
$ git checkout -f A -- .
$ git commit -a
それならば、以下の状況:
A <-- B <-- C <-- D <-- A' <-- master <-- HEAD
のコミットは同じ内容のコミットでは、異なるコミットをコミットメッセージ、保護者、コミット。
の 液Jeff Ferland変更によるチャールズベイリー 基づいて構築されている方によっては、 gitリセット:
$ git reset --hard A
$ git reset --soft @{1} # (or ORIG_HEAD), which is D
$ git commit
他のヒント
そうするために、あなたはちょうどあなたが戻っ取得したいコミットの範囲を指定して、の元に戻すのコマンドを使用する必要があります。
アカウントに例を取ると、あなたがこれを行う必要があるだろう(あなたがブランチ「マスター」にしていると仮定します)
git revert master~3..master
このはB、CとDのコミット逆に、ローカルにコミット(それがこれらのコミットによって導入された変更を元に戻すだろうことを意味する)、新規に作成します。
A <- B <- C <- D <- BCD' <- HEAD
私は重宝クリーンな方法
git revert --no-commit HEAD~3..
このコマンドは一つだけで、最後の3つのコミットコミット戻ります。
また、歴史を書き換えません。
ヤクブの答えと同様に、これはあなたが簡単に元に戻すの連続コミットを選択することができます。
# revert all commits from B to HEAD, inclusively
$ git revert --no-commit B..HEAD
$ git commit -m 'message'
git reset --hard a
git reset --mixed d
git commit
これは、一度にすべてのための差し戻しとして機能します。良いコミットメッセージを付けます。
まず、あなたの作業コピーが変更されていないことを確認してください。その後ます:
git diff HEAD commit_sha_you_want_to_revert_to | git apply
、その後、ちょうどコミット。差し戻しの理由何文書化することを忘れないでください。
私はこの質問だけで答えることができないほどイライラです。他のすべての質問が正しく戻すと歴史を維持するためにどのように関連しています。この質問は、<全角>「私はつまり、私はB、C、D、および に消えるまでHEADをしたい、ポイントにAへの分岐の頭をしたいと私は頭がA.と同義になりたい」と言いますの
git checkout <branch_name>
git reset --hard <commit Hash for A>
git push -f
私はヤクブの記事を読んで多くのことを学びましたが、(pull要求することなく、私たちの「テスト」ブランチにプッシュするアクセス権を持つ)会社でいくつかの男は、彼が5を作った間違いを修正し、修正し、修正しようと5つの悪いコミットのようにプッシュ前にコミットします。今悪かったこれは、受け入れられたそれだけでなく、1または2つのプル要求を。だから、それを忘れて、私は最後の良好なコミット(ABC1234)とちょうど基本的なスクリプトを実行しました。
git checkout testing
git reset --hard abc1234
git push -f
私は、彼らがより良い最後の数時間のために彼らの変化をメモし、ワイプ/再支店最新のテストから、このレポで働く他の5人を語りました。物語の終わります。
これはヤクブの答えで提供ソリューションの一つの拡張であるの
私は、コミットをマージしているコミットのいくつかと、私はロールバックするために必要なコミットはやや複雑だった状況に直面し、私は歴史を書き換え避けるために必要でした。私は最終的に追加されている復帰の変化の間の衝突に走ったのでgit revert
の一連のコマンドを使用することができませんでした。私は、次の手順を使用して終了します。
まず、ターゲットの内容をチェックしてくださいコミット枝の先端にHEADを残します:
$ git checkout -f <target-commit> -- .
( - 確認<target-commit>
がファイルではなく、コミットとして解釈されることができる、現在のディレクトリを意味する。)
次に、ロールバックされ、コミットに追加されたどのようなファイルを決定し、したがって、削除する必要があります:
$ git diff --name-status --cached <target-commit>
追加されたファイルは、行の先頭に「A」と表示されるはずです、と他の違いがあってはなりません。今、すべてのファイルは除去のため、これらのファイルをステージング、削除する必要がある場合:
$ git rm <filespec>[ <filespec> ...]
最後に、復帰をコミットします:
$ git commit -m 'revert to <target-commit>'
必要であれば、我々は戻って所望の状態にしていることを確認してます:
$git diff <target-commit> <current-commit>
は差があってはなりません。
共有リポジトリにコミットのグループを元に戻すための簡単な方法は、(人々が使用していて、歴史を維持したいという)のgit git revert
と一緒にrev-list
を使用することです。後者は、前者が復帰自体を行います、コミットのリストを提供します。
がありそれを行うには、2つの方法を。必要に応じて元に戻すの複数は、単一のコミットの使用にコミットします:
for i in `git rev-list <first-commit-sha>^..<last-commit-sha>`; do git revert -n $i; done
これは、あなたがいつものようにそれらすべてをコミットする必要があり、あなたが必要なコミットのグループを元に戻すが、あなたの作業ツリー上のすべての変更を残すだろう。
別のオプションは、単一のは、元に戻すの変更ごとにコミットすることです。
for i in `git rev-list <first-commit-sha>^..<last-commit-sha>`; do git revert --no-edit -s $i; done
たとえば、あなたが
のようなコミットツリーを持っている場合 o---o---o---o---o---o--->
fff eee ddd ccc bbb aaa
タグの実行、のEEE ののBBB のへの変更を元に戻します
for i in `git rev-list eee^..bbb`; do git revert --no-edit -s $i; done
これらのどれも私のために働いていないので、私は(最後の三つのコミットを)戻すための3つのコミットを持っていたので、私はやったます:
git revert HEAD
git revert HEAD~2
git revert HEAD~4
git rebase -i HEAD~3 # pick, squash, squash
の魅力のように働いた:)
私の意見では非常に簡単でクリーンな方法が考えられます:
Aに戻る
git checkout -f A
現在の状態をポイントマスターの頭
git symbolic-ref HEAD refs/heads/master
保存
git commit
あなたが一時的に機能のコミットを元に戻したい場合は、次の一連のコマンドを使用することができます。
ここではそれがにどのように動作するか
gitのログ--pretty =としてoneline | grepの 'FEATURE_NAME' | -d '' -f1をカット| gitのは、
--no-編集を元に戻す-n1 xargsの