2011-12-16 13 views
6

gitに問題がありました。私は古いものを取得していて、新しいバージョンを開始したいプロジェクトのリポジトリを持っています。私は新しいブランチ(3.0-wip)を作成し、ファイルとフォルダを削除して再開しました。しかし、私がmasterブランチをチェックアウトすると、ファイルとフォルダもそこから消えてしまいます。異なるgitブランチの異なるディレクトリ構造を維持する

マスターブランチにリモートリポジトリのすべてがありますが、3.0-wipに完全に異なる作業ディレクトリがあるので、他のブランチのファイルやフォルダを破壊することなく自分の心のコンテンツに変更できます。

+0

あなたはmasterブランチにチェックアウトする前に、3.0-WIPブランチにコミットしましたか?もしそうでなければ、それはおそらく問題です。 –

+0

私は外部レポをクローンしました。新しい '3.0-wip'ブランチを作成してチェックアウトしました。 Finderでファイルやフォルダを削除しました。新しい 'index.php'ファイルを作成し、それをコミットしました。私の 'master'ブランチをチェックアウトするとファイルは消え、' git status'はすべてのファイル/フォルダを 'deleted:'として表示します。 –

+1

あなたは追加しましたか? |コミットする前にgit add -u? 3.0-wipブランチでこれらの変更をどのようにコミットしましたか? –

答えて

6

コミットあるブランチの変更は、別のブランチに影響しません。あなたは、すべての削除をコミットする必要があります、それはドミニクが説明しようとしたことです。単に:

$ git co $NEWBRANCH 
$ git status 

あなたはコミットされていない削除の数が表示されます。ファイルを削除するには、git rmを使用する必要があります。
確かに、git add --allは削除も処理します。とにかく、新しい支店にはまだ古い歴史が残っているため、これはIMOが新たに開始する最良の方法ではありません。

  1. は、新しいレポを作成します:mkdir $DIR; cd $DIR; git init
  2. が作成初期のコミット

    は、私は新しい「disconected」コミットを作成した方が良いと思います。 touch README; git add --all; git commit -m "Init"

は今、元のレポにに行くと:

  1. は、リモートとしてそれを追加します。git remote add start-anew $DIR/.git
  2. はそれをフェッチ:git fetch start-anew
  3. はそれを引っ張っ:git co -b start-anew start-anew/master

そして、新鮮な空の歴史を持つブランチを願ってください。

リモートを削除し、ブランチのリモートも変更することができます。私は通常、手動で.git/configを手作業で編集していますが、今のところ事故はありません。

+0

これに従うようにしましたが、 'start-new 'リポジトリを取得しようとしたときに、「致命的なエラーが発生しました:リモートエンドが予期せずハングアップしました」というエラーが表示されます。 –

+0

'git version 1.7.6.4'で私のために動作しますか? – Martian

+0

'start-aew'リポジトリをGithubにプッシュし、そこでそこからフェッチすることで私の仕事をしました。私のローカルマシンからフェッチしようとすることと関係している必要があります。 –

8

gitを正しく使用していない場合があります。ブランチの作成やファイルやフォルダの削除には全く問題はありません。マスターブランチに切り替えると、削除されたファイルとフォルダはそのブランチから削除されていないので復元されます。

あなたのケースでは、git rmコマンドではなくオペレーティングシステムの削除を使用して、gitの下からファイルやフォルダを削除している場合があります。だから、gitのステータスは、それらを「削除済み」として報告します。また、ブランチを切り替えるとファイルが削除されたままになるのも理由です。 gitはファイルがそこにあることを期待しており、そうではありません。

ステータスが "git add"を実行するように指示しても動作しません。ファイルはもはや存在しないので、git addを実行すると、自動的に失敗します。気づかないかもしれませんが、メッセージは "git rm"を実行するように指示します。あなたはファイルがなくなったので、あなたがそれをすることができないと思うかもしれませんが、それは真実ではありません。 rmコマンドは、ファイルシステムからファイルを削除しても、そのファイルをリポジトリから削除するのに成功します。

git add -Aを実行すると、やりやすいことは簡単です。 -Aフラグは、削除または追加されたファイルに通知するためにaddに通知します。

は、テストのためにこれを試してみてください:

git init test-delete 
cd test-delete 
touch filea 
mkdir dir_b 
touch dir_b/fileb 
git add . 
git commit -m "Initial commit" 
git checkout -b new_branch 
rm -rf dir_b 
git add -A 
git commit -m "deleted files from branch" 
(ls to prove files arent' there) 
git checkout master 
(ls to show files have been restored) 
git checkout new_branch 
(ls to show files are gone again) 
関連する問題