ローカルリポジトリブランチをリモートリポジトリHEADのようにリセットします

4146
hap497 2009-10-27 14:27.

ローカルブランチをリモートリポジトリのブランチと同じようにリセットするにはどうすればよいですか?

やった:

git reset --hard HEAD

しかし、私が実行するとgit status

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

これらの「変更」を行った理由を教えてください。私はこれらのファイルに触れていませんか?もしそうなら、私はそれらを削除したいと思います。

20 answers

7247
Dan Moulding 2009-10-27 15:44.

リモートブランチと完全に一致するようにブランチを設定するには、次の2つの手順を実行します。

git fetch origin
git reset --hard origin/master

これを行う前に(念のため)現在のブランチの状態を保存したい場合は、次のことができます。

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

これで、作業を元に戻したい(または後で確認したり、更新されたブランチと比較したい)場合に備えて、作業がブランチ「my-saved-work」に保存されます。

最初の例では、リモートリポジトリの名前が「origin」であり、リモートリポジトリの「master」という名前のブランチがローカルリポジトリの現在チェックアウトされているブランチと一致することを前提としていることに注意してください。

ところで、あなたがいるこの状況は、非ベアリポジトリの現在チェックアウトされているブランチにプッシュが行われた一般的なケースに非常によく似ています。最近、ローカルリポジトリにプッシュしましたか?そうでない場合は、心配する必要はありません。他の何かが原因で、これらのファイルが予期せず変更されてしまう可能性があります。それ以外の場合は、ベアでないリポジトリにプッシュすることはお勧めしません(特に、現在チェックアウトされているブランチにはプッシュしないでください)。

466
Akavall 2014-12-27 20:20.

私はする必要がありました(受け入れられた答えの解決策):

git fetch origin
git reset --hard origin/master

に続く:

git clean -f

ローカルファイルを削除するには

どのファイルが(実際に削除せずに)削除されるかを確認するには:

git clean -n -f
347
Acumenus 2015-02-11 10:27.

まず、git resetを使用してHEAD、対応するアップストリームブランチの以前にフェッチされたものにリセットします。

git reset --hard @{u}

指定@{u}またはその詳細形式の利点は@{upstream}、リモートリポジトリおよびブランチの名前を明示的に指定する必要がないことです。WindowsまたはPowerShellの場合は、"@{u}"(二重引用符で)指定します。

次に、必要に応じて、git cleanを使用して、追跡されていないファイルを削除します。オプションで、次のコマンドも使用し-xます。

git clean -df

最後に、必要に応じて、最新の変更を取得します。

git pull
118
Mikael Ohlson 2009-10-27 15:08.

git reset --hard HEAD実際には、最後にコミットされた状態にのみリセットされます。この場合、HEADはブランチのHEADを指します。

複数のコミットがある場合、これは機能しません。

おそらくやりたいことは、オリジンのヘッドまたはリモートリポジトリと呼ばれるものにリセットされます。私はおそらく次のようなことをするでしょう

git reset --hard origin/HEAD

ただし、注意してください。ハードリセットは簡単に元に戻すことはできません。ダンが提案するように実行し、リセットする前に変更のコピーを分岐することをお勧めします。

78
Christopher Smith 2015-07-24 07:48.

上記の提案はすべて正しいですが、プロジェクトを実際にリセットするには、にあるファイルも削除する必要があります.gitignore

プロジェクトディレクトリ消去してリモートから再クローンを作成するのと道徳的に同等なものを取得するには、次のようにします

git fetch
git reset --hard
git clean -x -d -f

警告:元git clean -x -d -f戻せないため、ファイルやデータが失われる可能性があります(たとえば、を使用して無視したもの.gitignore)。

50
Jamsheer 2019-03-23 00:19.

以下のコマンドを使用してください。これらのコマンドは、追跡されていないすべてのファイルをローカルgitからも削除します

git fetch origin
git reset --hard origin/master
git clean -d -f
41
Robert Siemer 2016-01-31 15:29.

質問には、ここで2つの問題が混在しています。

  1. リモートが存在するポイントにローカルブランチをリセットする方法
  2. それはので、あなたのステージングエリア(そしておそらく作業ディレクトリ)をクリアする方法をgit status述べていますnothing to commit, working directory clean.

ワンストップの答えは次のとおりです。

  1. git fetch --prune (オプション)リモートリポジトリのローカルスナップショットを更新します。それ以降のコマンドはローカルのみです。
    git reset --hard @{upstream}リモートのスナップショットがある場所へのローカルブランチポインタを配置し、インデックスと作業ディレクトリをそのコミットのファイルに設定します。
  2. git clean -d --force gitが「作業ディレクトリをクリーン」と言うのを妨げる追跡されていないファイルとディレクトリを削除します。
25
Andrew Tulloch 2012-11-10 03:01.

これは私が定期的に直面していることであり、Wolfgangが上記で提供したスクリプトを一般化して任意のブランチで機能するようにしました

また、「よろしいですか」というプロンプトといくつかのフィードバック出力を追加しました

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? " [ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp" if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname" git fetch origin git reset --hard origin/$branchname
23
eigenharsha 2017-05-09 01:12.

リモートリポジトリがoriginであり、興味がある場合branch_name

git fetch origin
git reset --hard origin/<branch_name>

また、の現在のブランチをoriginにリセットしHEADます。

git fetch origin
git reset --hard origin/HEAD

使い方:

git fetch origin 何もマージまたはリベースしようとせずに、リモートから最新のものをダウンロードします。

次に、ブランチをフェッチしたものにgit resetリセットし<branch_name>ます。この--hardオプションは、作業ツリー内のすべてのファイルを変更して、内のファイルと一致させますorigin/branch_name

16
user2846569 2014-05-14 21:48.

やった:

git branch -D master
git checkout master

ブランチを完全にリセットする


必要なブランチを削除できるようにするには、別のブランチにチェックアウトする必要があることに注意してください

16
Wolfgang Fahl 2012-10-15 22:50.

これは、最も人気のある回答が示唆することを自動化するスクリプトです...を参照してください。 https://stackoverflow.com/a/13308579/1497139 ブランチをサポートする改善されたバージョンの場合

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see https://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp" if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master
12
Karol 2014-06-16 17:35.

私のように問題が発生した場合、すでにいくつかの変更をコミットしていますが、何らかの理由でそれを取り除きたい場合は、次のように使用するのが最も簡単な方法ですgit reset

git reset --hard HEAD~2

不要なコミットが2つあったため、2になりました。独自のコミット数に変更してリセットできます。

したがって、質問に答える-リモートリポジトリHEADの前に5コミットしている場合は、次のコマンドを実行する必要があります。

git reset --hard HEAD~5

行った変更は失われることに注意してください。注意してください。

8
Rainer Blome 2016-06-26 07:13.

以前の回答では、リセットされるブランチが現在のブランチ(チェックアウトされている)であると想定しています。コメントで、OP hap497は、ブランチが実際にチェックアウトされていることを明確にしましたが、これは元の質問では明示的に要求されていません。少なくとも1つの「重複」質問があるため、ブランチをリポジトリ状態に完全にリセットします。これは、ブランチがチェックアウトされていることを前提とはしていません。別の方法を次に示します。

ブランチ「mybranch」が現在チェックアウトされていない場合、リモートブランチ「myremote / mybranch」のヘッドにリセットするには、次の低レベルコマンドを使用できます。

git update-ref refs/heads/mybranch myremote/mybranch

この方法では、チェックアウトされたブランチはそのままで、作業ツリーは変更されません。2番目の引数として指定されているものは何でも、mybranchの頭を別のコミットに移動するだけです。これは、複数のブランチを新しいリモートヘッドに更新する必要がある場合に特に役立ちます。

ただし、これを行うときは注意して、gitkまたは同様のツールを使用してソースと宛先を再確認してください。現在のブランチで誤ってこれを行った場合(そしてgitがこれを妨げない場合)、新しいブランチの内容が変更されていない作業ツリーと一致しないため、混乱する可能性があります(修正するには、ブランチを再度更新します。以前の場所へ)。

8
James Ray 2018-04-26 15:30.

これは私がよく使うものです:

git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;

あなたのローカルマスタへの変更は、/枝を開発しないこととしたことは良い習慣ですが、代わりにチェックアウト変更のための別のブランチに、変更の種類によって先頭に付加ブランチ名を持つ、例えばという注意feat/chore/fix/、などしたがって、あなただけに必要マスターから変更をプッシュするのではなく、変更をプルします。他の人が貢献している他のブランチについても同じことが言えます。したがって、上記は、他の人がコミットしたブランチに変更をコミットし、リセットする必要がある場合にのみ使用する必要があります。それ以外の場合は、将来、他の人がプッシュするブランチにプッシュすることを避け、代わりにチェックアウトして、チェックアウトされたブランチを介してそのブランチにプッシュします。

ローカルブランチをアップストリームブランチの最新のコミットにリセットしたい場合、これまでのところ私にとってうまくいくのは次のとおりです。

リモートをチェックし、アップストリームとオリジンが期待どおりであることを確認します。期待どおりでない場合はgit remote add upstream <insert URL>、たとえば、フォーク元の元のGitHubリポジトリを使用しますgit remote add origin <insert URL of the forked GitHub repo>

git remote --verbose

git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force

GitHubでは、ローカルの保存済み作業ブランチと同じ名前のブランチをチェックアウトして、そこで作業を保存することもできますが、オリジン開発でローカルの保存済み作業ブランチと同じ変更があった場合は必要ありません。例としてdevelopブランチを使用していますが、既存のブランチ名であればどれでもかまいません。

git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop

次に、競合があるときにこれらの変更を別のブランチとマージする必要がある場合は、開発の変更を保持して、次を使用します。

git merge -s recursive -X theirs develop

使用中

git merge -s recursive -X ours develop

branch_nameの競合する変更を保持します。それ以外の場合は、と一緒にmergetoolを使用しgit mergetoolます。

すべての変更を一緒に:

git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;

アップストリーム/開発の代わりに、コミットハッシュや他のブランチ名などを使用できることに注意してください。OhMyZshなどのCLIツールを使用して、ブランチが緑色で、コミットするものがなく、作業ディレクトリがクリーンであることを確認します(これはgit status)によって確認または検証可能です。これは実際にはそう、その場合には、コミットによって自動的に例えばUMLダイアグラム、ライセンスヘッダなど、追加何があるかどうか開発上流へと比べコミットを追加することがありますが、あなたはその後に変更を引っ張る可能性origin developupstream develop必要であれば、。

8
Anael 2020-01-25 14:29.

答え

git clean -d -f

過小評価されていました(ディレクトリを削除するには-d)。ありがとう!

6
Emil Sit 2009-10-27 16:10.

HEAD作業ディレクトリとインデックスの両方の状態に戻りたい場合はgit reset --hard HEAD、ではなく、を実行する必要がありHEAD^ます。(これは、のシングルダッシュとダブルダッシュのように、タイプミスであった可能性があります--hard。)

これらのファイルが変更済みのステータスで表示される理由に関する具体的な質問については、ハードリセットではなくソフトリセットを行ったようです。これにより、HEADコミットで変更されたファイルがステージングされたように表示されます。これは、ここに表示されている可能性があります。

5
Martin 2016-12-02 00:25.

リセットとクリーニングの量は、ローカルのgitリポジトリ内の追跡されていないファイルと変更されたファイルに影響を与えていないようです(上記のすべてのオプションを試しました)。これに対する私の唯一の解決策は、ローカルリポジトリをrmし、リモートから再クローンすることでした。

幸いなことに、私が気にかけている他の支店はありませんでした。

xkcd:Git

5
Deep Nirmal 2019-12-17 09:04.

3つのコマンドだけで動作します

git fetch origin
git reset --hard origin/HEAD
git clean -f
2
sudo 2017-09-15 09:28.

私が見たすべての場合に機能する唯一の解決策は、削除して再クローン化することです。別の方法があるかもしれませんが、明らかにこの方法では古い状態がそこに残る可能性がないので、私はそれを好みます。gitで頻繁に混乱する場合は、マクロとして設定できるBashワンライナー:

REPO_PATH=$(pwd) && GIT_URL=$(git config --get remote.origin.url) && cd .. && rm -rf $REPO_PATH && git clone --recursive $GIT_URL $REPO_PATH && cd $REPO_PATH

* .gitファイルが破損していないことを前提としています

2
Grastveit 2019-10-18 04:38.

機能ブランチを作成するのを忘れて、誤ってマスターに直接コミットしましたか?

今すぐ機能ブランチを作成し、ワークツリー(ローカルファイルシステム)に影響を与えることなくマスターを元に戻して、ビルド、テスト、およびファイルロックの問題のトリガーを回避できます。

git checkout -b feature-branch
git branch -f master origin/master

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

今週のコミックコンですべての素晴らしいものに追いつく方法

今週のコミックコンですべての素晴らしいものに追いつく方法

サンディエゴコミックコンは今週開幕し、オタクのアナウンス、ポスター、予告編、お気に入りの番組や映画のからかいでいっぱいになります。SDCCは、コンベンションフロア全体の多くのパネルで行われているため、すべてに対応するのは難しい場合があります。

Googleの9千万ドルの和解はアプリ開発者にとってもGoogleにとっても勝利ですか?

Googleの9千万ドルの和解はアプリ開発者にとってもGoogleにとっても勝利ですか?

小さなアプリ開発者は金曜日に発表された法的な和解でグーグルから9千万ドルをこじ開けた。アップルとの同様の合意に続いて熱くなった。金曜日のブログ投稿で、Googleは、Androidメーカーが市場での優位性を悪用してPlayストア経由でのアプリ内購入に対して30%の料金を不当に請求したと主張するアプリ開発者との訴訟を解決するために、9千万ドルを支払うことに合意したと述べました。

RadioShackのTwitterはハッキングされていませんでした、それはただの暗号のサクラです

RadioShackのTwitterはハッキングされていませんでした、それはただの暗号のサクラです

今週、RadioShackのTwitterアカウントは、奇妙なものから完全にひどいものになりました。短い順序で、会社のフィード全体が、バイブレーター、「ビッグティット」(スペルミス)、有名人やその他の企業アカウントを荒らしているツイートなど、NSFW素材の真の山になりました。

ヒッグス粒子から10年後、物理学にとって次の大きなものは何ですか?

ヒッグス粒子から10年後、物理学にとって次の大きなものは何ですか?

大型ハドロン衝突型加速器のトンネル内にあるコンパクトミュオンソレノイド(CMS)検出器。2012年7月4日、CERNの科学者たちは、1960年代に最初に提案された素粒子であるヒッグス粒子の観測を確認しました。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

Un breve viaje espacial sobre conceptualizar el diseño

Complicarse la vida, mezclar churros con meninas (nada de ovejas) y encontrar valor en un trastero que adquiriste en una puja.

Un breve viaje espacial sobre conceptualizar el diseño

Bien. Hay un momento en toda salida al espacio exterior en el que de la tensión, la velocidad y las altas temperaturas derivadas del cruce de estratosfera a ionosfera se pasa a un momento de súbita calma, donde se despliega la vista completa del paisaje espacial que nos rodea.

Seguindo Todos os Protocolos (2022), de Fábio Leal

Seguindo Todos os Protocolos (2022), de Fábio Leal

Chico quer transar. Até aí, tudo bem.

多元宇宙—Junø

多元宇宙—Junø

チェーン間アカウントがJunoに登場します。異なるブロックチェーン間でスマートコントラクトの構成可能性と真の相互運用性を提供します。

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

1.ドラマを見た後、起業する考えはありますか?あなたのビジネスはボトルネックに遭遇しましたか?方向性がなくてわからない場合は、ドラマを追いかけて行くことを心からお勧めします。(?)ブラフではなく、最も完璧なビジネス例を隠すドラマがあります。2.ブレイキング・バッドとその弁護士ドラマ「ブレイキング・バッド」を見た友人たちは、演劇の中で、穏やかな表情で、弁護士のソウル・グッドマンに深く感銘を受けなければなりません。口を開けて、感覚の弱い傭兵の性格を持っています。道徳の面で、サル・グッドマンは無意識のうちに劇に欠かせない役割を果たし、彼自身のシリーズ「絶望的な弁護士」(ベター・コール・ソール)を生み出しました。ウェントウのテキストとビデオは、劇中のソウル・グッドマンのテレビコマーシャルです。製品(サービス)、競争戦略、市場ポジショニング、ブランド名、ターゲット顧客グループ、コミュニケーション軸から広告まで、サル・グッドマンの役割のビジネス設定は、「最低」と見なすことができる超超超超超超完全です。ブランドコミュニケーションのコスト」「変化」のモデル。なぜ?私の分析をご覧ください。3.ソウル・グッドマンの「事業戦略」1.基本情報ブランド名:Saul Goodman製品:法律相談サービス対象顧客:麻薬中毒、飲酒運転、事故など。法律知識の欠如は、一般的に公立弁護士にしか余裕がなく、真面目な弁護士も「特別な法律を持つ消費者」を避けます。恐れてはいけない「​​ニーズ」。コミュニケーションの主軸:この国のすべての男性、女性、子供は有罪判決を受けるまで無実だと思います。地域:アルバカーキ市スローガン:Thrallに電話したほうがいいです!(ベター・コール・ソール)広告:2つの可能性のある犯罪状況をシミュレートします+サウルの主張+サウルのスローガン2をより適切に呼び出します。

Language