私はブランチfeature-Test
をmasterから作成しました。 feature-Test
ブランチには、次のフォルダ構造が含まれています。gitへのプッシュを元に戻すには
Test/methods
誤って削除してマスターにプッシュコミットしました。
私は同じフォルダ構造を持つように元に戻すにはどうしたらいいですか?
私はブランチfeature-Test
をmasterから作成しました。 feature-Test
ブランチには、次のフォルダ構造が含まれています。gitへのプッシュを元に戻すには
Test/methods
誤って削除してマスターにプッシュコミットしました。
私は同じフォルダ構造を持つように元に戻すにはどうしたらいいですか?
は、私はあなたがで間違いをしたコミットをチェックすることをお勧めします:あなたがコミットが何であるかを確信している場合、
git checkout hash
しかし、あなたがする必要があります、マスターにプッシュ
git reset --hard hash
そして、 。
私はgit checkoutハッシュを行い、次にgit statusを実行しました。それは頭が離れていることを示しています9057856 – kittu
そして何が問題なのですか?これはあなたが望むもので、最後のコミットから離れます。 –
git revert <commit_id>
でコミットを元に戻すことができます。これにより、<commit_hash>
で指定したコミットの変更を元に戻す新しいコミットが作成されます。
<commit_id>
を取得するには、git reflog
を実行し、変更を行った関連するコミットを見つけます。
使用 git reset ~HEAD
最後は が再びフォルダを追加コミットし、新しいはその後、再び、私はあなたの問題は、それを解決することを願っていgit push origin master
でそれを押しgit commit -am "<your_message>"
を使用してコミットしますuncommitします。それを使ってみてください。
これにはいくつかの方法があります。一般的には、間違いを完全に取り消すために履歴を書き直すか、履歴の末尾に「元に戻す」を追加することができます。履歴には「ファイルを削除するコミット」、ファイルを元に戻す "。
考慮すべき点の1つは、共有された(「プッシュ」された)履歴を書き直すにはコストがかかります。他のほとんどの回答のアドバイスに従おうとすると、push
を試してみるとエラーになります。これは、あなたが他のユーザーに問題を引き起こす可能性のある履歴を書き直そうとしていることを伝えるgitです。あなたはまだそれを行うことができますが、軽く決定を下すべきではありません。なぜそれが起こるかを議論することなく、これをアドバイスすることは大変だと思うのはなぜですか?
ファイルの削除を含むコミットにも保持したい変更が含まれているかどうかを考慮する必要があります。あなたは完全にコミットの変更のすべてを逆にしたい場合は、しかし、あなたのブランチの歴史の一部としてコミット保つために喜んでいる、あなたは単に
git revert HEAD
この意志を実行します。
それでは、簡単な始めましょう最新のコミットの前にどのように見えるかにコンテンツを戻す新しいコミットを作成します。その結果、削除後にコミットされたことはないと仮定して、削除されたファイルは元に戻ります。 git log
には、エラーがあるコミットとそれを取り消すためのコミットが表示されることを除いて、このコミットをプッシュすることができます。
削除後に他の作業がコミットされた場合は、これを適用できます。revert
コマンドに、元に戻すコミットの有効な名前を付けるだけです。これは、コミットID、またはHEAD~2
のような式(実行した後に2つのコミットがある場合)、またはいくつかの条件では、reflog式です。多くの可能性があります。
あなたがコミットから、いくつかの変更を保持したい場合は、これは似ている
git revert -n HEAD
言うことができるが、その代わりに、自動的に「元に戻す」の変更をコミットし、それはちょうどあなたの索引と作業ツリーでそれらを置きますつまり、段階的だがコミットされていない変更です。 git checkout HEAD -- path/to/a/file/with/changes/you/want/to/keep
など、コミットをさらに編集することができます。このプロセス全体を通じて
、あなたがしたい、これは差し戻しであるので、あなたがしたいすべての変更が元に戻さからがコミットおくことを思い出して、上演されているどのような変更を決定するために1をgit status
をされて使用することができますは、最終的には表示されませんstatus
。
"backwards"のような作業が混乱している場合や、削除されたファイルのパスを特定するのが簡単な場合は、revertコマンドをスキップして手動で「元に戻す」作業を実行できます。各削除パス
git checkout HEAD^ -- path/to/deleted/file
あなたが削除されたものをファイル思い出さする必要がある場合には、あなたはD
で始まる行に1つずつ削除されたパスが表示されますどの
git show --name-status HEAD
を使用することができます。
何らかの理由で余計なトラブルが発生した場合は、代わりに履歴を修正することができます。あなたは、歴史が偶然のコミットなしに「よりクリーン」に見えると思うかもしれませんが、率直に言って、それは多くの人に不必要な労力を要する虚栄心です。それを押した後にコミットを取り除くことを本当に正当化する理由の大部分は、パスワードを含むコミット、膨大なファイルを含むコミットなど、私がここで綴るものよりも徹底的な手順が必要です。これは履歴の見た目を「整理」するための最小限の手順であり、首にはまだ痛みがあることがわかります。
あなたのブランチは、非早送りのように移動するので、あなたが
git reset --hard HEAD^
git push
ような何かをしようとした場合、あなたは見つけることの問題は、Gitはプッシュを拒否するということです。あなたが悪い場所に他の開発者を入れているあなたの警告をpush -f
をされて使用
git push -f
を使用してプッシュを強制することができ、現在、彼らのリポジトリはブランチの状態について悪い仮定をしており、回復する必要があります。詳細については、git rebase
のドキュメントの「上流リベースからの回復」を参照してください。その指針は、あなたが押した履歴の書き換えに適用されます。要するに、他の開発者は強制的にプッシュを反映するためにローカル参照を強制的に更新する必要があります。 (代わりに、自分の仕事を強制的にプッシュすると、あなたの修正が取り消されますので、皆と調整する必要があります)。間違ったコミットに基づいてすでに行った作業はすべてリベースする必要があります。
他の開発者がほとんどいない場合、またはそのブランチではあまり動作しない場合は、みんなとのコミュニケーションは良いです。それは働くことができます。しかし、再び、そう簡単にrevert
することができます。
[Gitリポジトリを以前のコミットに戻すにはどうすればいいですか?](https://stackoverflow.com/questions/4114095/how-to-revert-git-repository-to-a-previous-commit) – Dez