2009-05-12 5 views
4

私はこのワークフローを使用しています:ReinH Gitのワークフロー

彼は言及

http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html

:「まず、しばらくmasterブランチ(Gitのチェックアウトマスター)に、最新の変更をプル: gitのプルを元のマスター これはマージコミットを作成するものではありません。マスターで直接作業していないからです。

おっと、私はやった。私は間違いなく、私のマスター(トピック・ブランズと比較して)にいくつかのファイルをいくつか変更しました。私は間違いを認識しました。トピックブランチを削除しました。今私は自分のコミットされた変更(マスターへ)を取り除きたい、何をすべきなのですか?私はまだリベースしていないか、または私の変更をリポにプッシュしたので、それはすべてローカルです。

本質的に、私はマスターコードの最新バージョンをプルダウンして、自分のローカルマスターに行ったことすべてを無視します(これは本当に1つのコミットです)。

答えて

11

あなたはmasterブランチにしている間、あなただけの、それを捨てるしたい場合:

git reset --hard HEAD^

このコマンドは、コミット前のにご主人のHEADポインタをリセットします。 (また、^ HEADと同じことを意味し、「〜1 HEAD」を言うことができる。)より一般的に、また、あなたのマスターは、サーバーのと同じになるようにリセットすることができます。

git reset --hard origin/master

これは関係なく、動作しますマスターの状態(つまり、5が起点より先にコミット、または30が後ろにコミット)。これらのコマンドの--hardオプションは、作業ツリー内のファイルもブランチヘッドとともにリセットされることを意味します。

エキストラのヒント

あなたが実際にあなたの変更を維持したい似たような状況にあった場合、あなたはいつでも行うことができます。

git fetch    # This grabs changes from the server without merging them 
git rebase origin

のマスターにあなたが持っているすべての作業を再生しますサーバー上の最新の変更のトップ

さらに別の代替は、マスター上であなたの仕事のためのトピックブランチを作成するには、次のようになります。

git checkout -b newfeature

次にあなたがマスター(gitのチェックアウトマスター)に切り替えることができ、私は戻ってマスターを巻き戻すために与えた最初のコマンドを使用します。 1つのコミット。ブランチは実際にリポジトリ内のコミットの便利な名前であることを覚えておいてください。たとえば、masterは、そのブランチ上の最新のコミットへの参照に過ぎません。これらの参照は自由に動かすことができ、gitでさらに進歩するにつれて、かなり頻繁にそれをやっていることに気付くでしょう。

ブランチで遊んでいるときはいつでも、gitk --allを実行する習慣を身につけて、自分が行っていることを視覚的に正確に見ることができます。私がgitに初めてだったとき、私はこのコマンドをいつものコマンドで実行した。。私はまだしています...

+0

素晴らしい!素晴らしい答えをありがとう。私はこのサイトが大好きです。 – jim

1

ブランチ削除によって失われたすべてのコミットはまだgitにあります。

これらのすべてにアクセスするには、reflogをトラバースします。見てみよう

man git-reflog 
関連する問題