web-dev-qa-db-ja.com

ローカルのGitの変更を削除するための様々な方法

Gitリポジトリをクローンしてブランチをチェックアウトしました。私はそれに取り組んで、そして私がオリジナルのコピーが欲しかったので、それから私のすべてのローカルの変更を削除することにしました。

手短に言うと、ローカルの変更を削除するには、次の2つのコマンドを実行する必要がありました。

git checkout .

git clean -f

私の質問は、 です

(1)これは地域の変化を取り除くのに正しいやり方なのか、それとも正しいやり方を教えてください。

(2)このコマンドがなくてもリセットできる場合は、いつgit reset --hardを使用しますか

ありがとう

*解決策:メジャー編集:03/26:* 曖昧な用語の多くをgit特有の用語に置き換えました[tracked/untracked/staged/unstaged]

ローカルに変更を加えた場合、ファイルのカテゴリは3つしかありませんでした。

タイプ1。段階的追跡ファイル

タイプ2。ステージングされていない追跡ファイル

未分類の未追跡ファイルa.k.a未追跡ファイル

  • ステージング - ステージングエリアに移動されたもの/インデックスに追加されたもの
  • 追跡 - 変更されたファイル
  • 追跡されていない - 新しいファイル。常にステージングされていません。上演されれば、それは彼らが追跡されることを意味します。

各コマンドの機能:

  1. git checkout . - ステージングされていない追跡ファイルのみを削除する[タイプ2]

  2. git clean -f - ステージングされていない追跡されていないファイルのみを削除する[タイプ3]

  3. git reset --hard - 段階的追跡ファイルと未段階追跡ファイルのみを削除する[タイプ1、タイプ2]

  4. git stash -u - すべての変更を削除します[Type 1、Type 2、Type 3]

結論:

どちらでも使えることは明らかです

(1) combination of `git clean -f` and `git reset --hard` 

OR

(2) `git stash -u`

望ましい結果を達成するため。

注:隠しているとは、Wordが「安全に(ひそかに)指定された場所に保管すること」を意味するためです。これは常にgit stash popを使って取得することができます。したがって、上記の2つの選択肢から選択することは開発者の要望です。

ChristophとFrederikSchøningに感謝します。

編集:03/27

git clean -fに 'beware'というメモを付ける価値があると思いました

git clean -f

戻ることはありません。あなたがするダメージをプレビューするために-nまたは--dry-runを使ってください。

ディレクトリも削除したい場合はgit clean -f -dを実行してください。

無視されたファイルを削除したいだけなら、git clean -f -Xを実行してください。

無視されたファイルと無視されないファイルを削除したい場合は、git clean -f -xを実行してください。

参照:git cleanの詳細: 現在のGit作業ツリーからローカル(追跡されていない)ファイルを削除する方法?

編集:05/20/15

このブランチのすべてのローカルコミットを破棄する [ローカルコミットを削除する]

このブランチのすべてのローカルコミットを破棄して、ローカルブランチをこのブランチの「アップストリーム」と同一にするには、単にgit reset --hard @{u}を実行します。

参照: http://sethrobertson.github.io/GitFixUm/fixup.html

[ローカルブランチがmasterの場合]またはgit reset --hard Origin/masterを実行します。

注:2015年6月12日 これは ではありません 他のSO質問と重複していると重複しています。この質問では、ローカルのGITの変更を削除する方法[追加されたファイルを削除する、既存のファイルに追加された変更を削除するなど、さまざまなアプローチを取ります。もう一方のSOスレッドでは、ローカルコミットの削除方法のみを指定します。ファイルを追加して、それを単独で削除したいのであれば、他のSOスレッドはそれについて議論しません。それ故、これは他のものの複製ではない。

編集:06/23/15

すでにリモートリポジトリにプッシュされたコミットを元に戻すにはどうすればいいですか?

$ git revert ab12cd15

編集:2015年9月1日

ローカルブランチとリモートブランチから以前のコミットを削除する

ケース:あなたはあなたのローカルブランチへの変更をコミットしてすぐにリモートブランチにプッシュしました、突然気づいた、ああ、いや!この変更は必要ありません。今何ですか?

git reset --hard HEAD~1 [ローカルブランチからそのコミットを削除するため]

git Push Origin HEAD --force [両方のコマンドを実行する必要があります。リモートブランチから削除する場合]

ブランチはどうですか?現在チェックアウトされているブランチです。

編集09/08/2015 - ローカルgitを削除する マージ

私はmasterブランチにいて、masterブランチを新しく動いているブランチphase2にマージしました

$ git status
# On branch master

$ git merge phase2

$ git status
# On branch master
# Your branch is ahead of 'Origin/master' by 8 commits.

Q:このマージをどうやって取り除くのですか?試してみましたgit reset --hardgit clean -d -fどちらもうまくいきませんでした。

がうまくいった であることは、以下のうちのどれかです。

$ git reset --hard Origin/master

または

$ git reset --hard HEAD~8

または

$ git reset --hard 9a88396f51e2a068bb7 [sha commit code - これはすべてのマージコミットが起こる前に存在していたものです]

596
spiderman

それはすべてあなたが元に戻す/元に戻そうとしているものに正確に依存します。 宇部のリンクの投稿 を読んで始めてください。しかし答えを試みるために:

ハードリセット

git reset --hard [HEAD]

追跡されたファイルに対するすべての段階的および未段階の変更を完全に削除します。

「リモートから完全なクローンの再作成を行った場合のように、すべての操作を元に戻す」というような場合は、ハードリセットを頻繁に使用します。あなたの場合、あなたがちょうどあなたのレポの元のままの状態がほしいところで、これはうまくいくでしょう。

クリーン

git clean [-f]

追跡されていないファイルを削除します。

一時ファイルを削除しますが、既に追跡されているファイルへの段階的および段階的でない変更を維持します。ほとんどの場合、私はおそらく繰り返し清掃するのではなく、無視ルールを作ることになるでしょう。 C#プロジェクト内のbin/objフォルダ用。通常は、スペースを節約するためにリポジトリから除外したい、またはそのようなものです。

-f(force)オプションは、追跡されていないファイルも削除します。andもignore-ruleを通じてgitによって無視されます。上記の場合、bin/objフォルダを決して追跡しないようにするためのignore-ruleがあります。これらのフォルダはgitによって無視されますが、force-optionを使用するとファイルシステムから削除されます。私は散発的にこの用途を見ました。デプロイメントのスクリプトを作成するときに、デプロイ、ジップなどの前にコードをクリーンアップしたい場合。

Git cleanはすでに追跡されているファイルには影響しません。

チェックアウト "ドット"

git checkout .

私はあなたの記事を読む前にこの記法を実際に見たことがありませんでした。私はこのためのドキュメントを見つけるのに苦労しています(多分誰かが手助けできる)が、少し遊んでみると、それはそれが意味するように見えます:

"作業中のツリーのすべての変更を元に戻す" _

すなわち追跡対象ファイルのステージングされていない変更を元に戻します。明らかに段階的な変更には触れず、追跡されていないファイルだけを残します。

隠し場所

いくつかの回答は隠し場所について述べています。文言が暗示するように、あなたが何かの最中(コミットの準備ができていない時)にはおそらくstashingを使うでしょう、そして後であなたの "厄介なところ"に戻るために一時的に分岐を切り替えるかコードの別の状態に取り組む必要があります。机"。これがあなたの質問に当てはまるとは思えませんが、間違いなく便利です。

まとめると

一般的に、あなたがコミットしてリモートの重要な変更を行ったと確信しているのなら、git reset --hard HEADに続けてgit clean -fを使ってコードを最終的にその状態にクレンジングすることになります。クローンを作成してブランチからチェックアウトします。再設定は段階的だがコミットされていない変更も削除することを強調しておくことは非常に重要です。 コミットされていないものはすべて消去します (追跡されていないファイルを除き、cleanを使用します)。

他のすべてのコマンドは、 "undoing stuff"の粒度が必要とされる、より複雑なシナリオを容易にするためにあります:)

あなたの質問#1は取り上げられていると思いますが、最後に#2を締めくくります。git reset --hardを使用する必要性を見つけられなかったのは、何も上演したことがないからです。 git checkout .git clean -fも変更を元に戻せなかったでしょう。

これがカバーすることを願っています。

現時点で回答を追加する理由:

これまでは、最初の質問自体に結論と「回答」を追加していたため、質問が非常に長くなり、別の回答に移りました。

さらに頻繁に使用されるgitコマンドも追加しました。

基本的にすべてのローカルコミットをクリーンアップする$ git reset --hard AND $ git clean -d -f


最初コミットを行う前のステップは、コミットとともに表示されるユーザー名とメールを設定することです。

#コミットトランザクションにアタッチする名前を設定

$ git config --global user.name "[name]"

#コミットトランザクションに添付するメールを設定

$ git config --global user.email "[email address]"

#グローバル設定を一覧表示

$ git config --list

#リモートURLのリスト

$ git remote show Origin

#check status

git status

#すべてのローカルおよびリモートブランチを一覧表示

git branch -a

#新しいローカルブランチを作成し、このブランチで作業を開始

git checkout -b "branchname" 

または、2段階のプロセスとして実行できます。

ブランチの作成:git branch branchnameこのブランチでの作業:git checkout branchname

#commit local changes [2ステッププロセス:-インデックスにファイルを追加します。つまり、ステージング領域に追加します。次に、このステージング領域に存在するファイルをコミットします]

git add <path to file>

git commit -m "commit message"

#他のローカルブランチをチェックアウトする

git checkout "local branch name"

#ローカルブランチのすべての変更を削除 [新しいファイルの追加、既存のファイルの変更、ローカルコミットの変更など、ローカルブランチでいくつかの変更を行ったが、それは不要になりました] git clean -d -fおよびgit reset --hardローカルコミットの場合を除き、ローカルブランチに対して行われたローカル変更]

git stash -uもすべての変更を削除します

注意:(1)git clean –d –fgit reset --hardの組み合わせOR(2)git stash -uのいずれかを使用して、目的の結果を達成できることは明らかです。

注1:Wordは「(何か)を指定された場所に安全かつ密かに保管する」ことを意味するため、スタッシングします。これは、git stash popを使用していつでも取得できます。したがって、上記の2つのオプションのいずれかを選択するのは開発者の要望です。

注2:git reset --hardは、作業ディレクトリの変更を削除します。このコマンドを実行する前に、保持したいローカルの変更を必ず隠しておいてください。

#masterブランチに切り替えるそして、最新であることを確認します。

git checkout master

git fetch [これは、Gitの設定によっては、Origin/masterの更新を受信するために必要な場合があります]

git pull

#機能ブランチをマスターブランチにマージします。

git merge feature_branch

#マスターブランチをOriginの状態にリセットします。

git reset Origin/master

#ローカルからファイルを誤って削除しました。それを取得する方法は?削除されたリソースの完全なファイルパスを取得するためにgit statusを実行します

git checkout branchname <file path name>

それでおしまい!

#masterブランチをsomeotherbranchとマージ

git checkout master
git merge someotherbranchname

#rename local branch

git branch -m old-branch-name new-branch-name

#ローカルブランチの削除

git branch -D branch-name

#リモートブランチの削除

git Push Origin --delete branchname

または

git Push Origin :branch-name

#すでにリモートリポジトリにプッシュされたコミットを元に戻す

git revert hgytyz4567

#GITを使用した以前のコミットからの分岐

git branch branchname <sha1-of-commit>

#すでにリモートにプッシュされている最新のコミットのコミットメッセージを変更する

git commit --amend -m "new commit message"
git Push --force Origin <branch-name>

#このブランチのすべてのローカルコミットを破棄[ローカルコミットの削除]

このブランチですべてのローカルコミットを破棄するには、ローカルブランチをこのブランチの「上流」と同一にするには、単に実行します

git reset --hard @{u}

参照: http://sethrobertson.github.io/GitFixUm/fixup.html またはdo git reset --hard Origin/master [ローカルブランチがマスターの場合]

#すでにリモートリポジトリにプッシュされたコミットを元に戻しますか?

$ git revert ab12cd15

#ローカルブランチおよびリモートブランチから以前のコミットを削除

se-Case:ローカルブランチに変更をコミットし、すぐにリモートブランチにプッシュしました。この変更は必要ありません。今何をしますか?

git reset --hard HEAD~1 [ローカルブランチからそのコミットを削除するため。 1は、1つのコミットを示します]

git Push Origin HEAD --force [両方のコマンドを実行する必要があります。リモートブランチから削除する場合]。現在チェックアウトされているブランチは、この操作を行っているブランチと呼ばれます。

#ローカルおよびリモートリポジトリから最近のコミットの一部を削除し、必要なコミットを保持します。 (ローカルおよびリモートからのコミットの一種の復帰)

develop」という名前のリモートブランチにプッシュした3つのコミットがあると仮定しましょう

commitid-1 done at 9am
commitid-2 done at 10am
commitid-3 done at 11am. // latest commit. HEAD is current here.

古いコミットに戻すには(ブランチの状態を変更する)

git log --oneline --decorate --graph //すべてのcommitidを見る

git clean -d -f //ローカルの変更を消去します

git reset --hard commitid-1 //このcommitidにローカルに戻ります

git Push -u Origin +develop //この状態をリモートにプッシュします。 +プッシュを強制する

#ローカルgit mergeの削除:ケース:私はmasterブランチ上にあり、masterブランチを新しく動作しているブランチとマージしましたphase2

$ git status

ブランチマスター上

$ git merge phase2$ git status

ブランチマスター上

あなたのブランチは8 commitsによって 'Origin/master'より先にあります。

Q:このローカルgitマージの削除方法git reset --hardgit clean -d -fの両方を試してみました両方とも機能しませんでした。 workedの唯一のものは、以下のいずれかです。

$ git reset --hard Origin/master

または

$ git reset --hard HEAD〜8

または

$ git reset --hard 9a88396f51e2a068bb7 [コミットコードを共有-これは、すべてのマージコミットが発生する前に存在していたものです]

#create gitignore file

touch .gitignore // MacまたはUNIXユーザーでファイルを作成

サンプル.gitignoreコンテンツ:

.project
*.py
.settings

GITチートシートへの参照リンク: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf

20
spiderman

Gitのすべてのものと同じように、それを行うには複数の方法があります。あなたが使用した2つのコマンドはそれをする1つの方法です。もう一つできることは、単にそれらをgit stash -uで隠すことです。 -uは、新しく追加されたファイル(追跡されていないファイル)も含まれるようにします。

git stash -uの便利なところは、

  1. それはおそらくあなたの目標を達成するための最も簡単な(唯一の?)単一のコマンドです
  2. 後で気が変わった場合は、 all git stash popで作業を戻してください(後で気が変わった場合は元に戻すことができるgmailのメールを削除するのと同じです)。

他の質問では、git reset --hardは追跡されていないファイルを削除しないので、git clean -fがまだ必要です。しかし、git stash -uが最も便利かもしれません。

20
Christoph

あなたが自分の地域の変化を全く保ちたくないとき。

git reset --hard

このコマンドはあなたのローカルリポジトリから全てのローカルの変更を完全に削除します。ローカルの変更をまったく保持したくない場合に限り、これはpullコマンドの実行中に衝突を避けるための最善の方法です。

2.自分の地域の変化を守りたいとき

あなたがリモートから新しい変更を引っ張りたいが、この引っ張りの間にローカルの変更を無視したいなら、その時、

git stash

それはすべてのローカルな変更を隠します、今リモートの変更を引っ張ることができます

git pull

今、あなたはあなたの地域の変化を取り戻すことができます、

git stash pop
7
Actung

Gitには明確に文書化されていないことが1つあります。それは実際には無視されたと思います。

git checkout .

男、あなたは私の日を救った。私はいつも修正したコードを使って試したいことがあります。しかし、場合によっては変更されたコードがめちゃくちゃになったり、新しい追跡されていないファイルが追加されたりすることもあります。そこで、やりたいことをステージングし、厄介なことを行い、その後すぐにクリーンアップして満足です。

git clean -fdは追跡されていないファイルに適しています。

それでgit resetはステージングを削除するだけですが、git checkoutはちょっと面倒です。ファイルを1つずつ指定したり、ディレクトリを使用したりするのは、必ずしも理想的ではありません。時々私が取り除きたい変更されたファイルは私が保ちたいディレクトリ内にあります。私は、ステージングされていない変更を削除するだけのこの1つのコマンドを望みました。ありがとう。

しかし、git checkoutをオプションなしで用意し、ステージングされていないすべての変更を削除して、ステージに触れないでください。ちょっとモジュラーで直感的です。 git resetが行うことのようなものです。 git cleanも同じことをするべきです。

4
Emmanuel Mahuni

つかいます:

git checkout -- <file>

作業ディレクトリ内の変更を破棄する。

4

最善の方法は変更をチェックアウトすることです。

Project-nameという名前のプロジェクト内のファイルpom.xmlを変更すると、それを行うことができます。

git status

# modified:   project-name/pom.xml

git checkout project-name/pom.xml
git checkout master

# Checking out files: 100% (491/491), done.
# Branch master set up to track remote branch master from Origin.
# Switched to a new branch 'master'
2
bpedroso

すべてを破棄する iそのstashを隠してドロップするのが好きです。特に複数のリポジトリ間で作業する場合は、すべてを破棄する最速の方法です。

これは{0}キーのすべての変更を隠して即座に{0}からドロップします。

git stash && git stash drop

2
Tatarin

まず最初に、あなたの重要な変更が保存されたかどうかを確認してください。

$ gitステータス

試すより

$ git reset --hard

ブランチをデフォルトにリセットします

しかし、元に戻すだけでいいのなら:

$ edit(1)$ git frotz.cを追加filfre.c $ mailx(2)$ git reset
(3)$ git pull git://info.example.com/ nitfol


もっと読む>> https://git-scm.com/docs/git-reset

1
Rizo