2013-06-28 12 views
14

私は私のプロジェクトに大きなリファクタリングの種類を作った:私は削除、ファイルの名前を変更、追加...また、私は.gitignoreで一部のフォルダを追加しました。しかし、リファクタリングの前にリモートリポジトリにコミットしました。「REINIT」リポジトリへの道

私のリポジトリにgit "reinit"を作成するには、もし存在しなければ、私は何をすべきですか?

更新

私は、フォルダ.gitを削除した、今私は

ヒントの誤差があります。そのリモート:あなたの現在のブランチの先端がヒントの背後にあるので、アップデートが拒否されました対応リモートの変更(例えば 'git pull')ヒントをマージしてから、もう一度押す。ヒント:詳細については、 'git push --help'の 'fast-forwardsに関する注意'を参照してください。

リモートのリポジトリとローカルの変更をマージする必要はありません。リモートのリポジトリをローカルのリポジトリに完全に置き換えるという意味です。

+0

は、あなたが "再初期化" により、クリーンな歴史を持っていたいですか?単純に前進して新しい変更をコミットしてみませんか? – Mingyu

+0

@Mingyu、私は1つだけコミットしたので、きれいなリポジトリを持つことは良い考えです。 –

+0

リモートレポの性質は何ですか?アクティブなクローンがない場合は、それを置き換えてください。 – tripleee

答えて

5

UPDATE

あなたは.gitフォルダ(ない素晴らしいアイデアを)削除した場合は、レポの新しいクローンを作成し、それに自分のものを移動し、そこに続けることができます。このようなもの

cd .. 
git clone <remote-repo-url> new-repo 
rm -rf new-repo/*       // this will not remove new-repo/.git 
cp -f <original-local-repo> new-repo 
cd new-repo 

次に、以下のように続けます。あなたが.gitフォルダを復元することができれば、それは良いです

注意。新しいリポジトリを作成すると、プッシュされなかったローカルブランチのように、元のローカルリポジトリにあったすべてのローカルリポジトリ情報が失われます。

ENDのUPDATE

あなたは

git reset --soft HEAD^ 
git add -A . 
git commit -m "rewriting history" 
git push --force origin master 

これは、(作業ツリーとインデックスを維持しながら)コミット以前にバックアップ変更をコミットして、歴史を書き換えプッシュを強制することができ遠隔地へ。

push --forceは危険です。それは既に引っ張っている人を邪魔し、非常に失礼だと考えられますが、誰もそれに取り組み始めていなければ、それは問題ではありません。

これは何が起こっているかである。

ここ
--- A -- B master 

    ^
    |  
    origin/master 

git push 

--- A -- B master, origin/master 

git reset HEAD^ 
git commit -am "rewriting" 

--- A -- B origin/master 
    \ 
     \ 
     B' master 

git push --force 

--- A -- B 
    \ 
     \ 
     B' master, origin/master 
+0

これは機能しますか?私はgitが履歴を削除するリモートコミットを受け入れないように設計されていると思った。それとも - 力は何ですか? – Paul

+0

履歴は一日中書き直すことができますが、コミットのハッシュが変更されます。コミットの内容を変更することはできませんが、それを修正して新しいコミットを作成し、 'master'が指すものを再定義することができます。 – tadman

3

怠惰な方法は、ちょうどすべての新しいファイルと変更、および削除を追加することです:あなたは任意の競合を持っていないよう

git add -A . 

が長いので、これは罰金でマージする必要があります。

+0

しかし、私はこれらのファイルをプロジェクトから削除したくありません。さて、私はそれらのいくつかを永久に(repoとディスクから)削除したいのですが、残りの部分については、gitインデックスに入れないようにします(gitには表示されません。 .gitignore)。私はそれらを手動で "git rm ..."ですべて削除する必要がありますか? –

+0

彼が望むようなサウンドは、きれいな履歴です... – Mingyu

+0

これらのファイルをプロジェクトから一時的に移動し、「削除」をコミットしてから、その時点から無視される場所に移動してください。移動すると、 'git add -A .'はこれらの削除を行います。コミット後、 '.gitignore'が正しく設定されていれば、それらを元に戻すことはあなたのレポに影響を与えません。 – tadman

2

は再初期化リポジトリへのステップです。

シナリオ:以前にgit initを作成したプロジェクトのローカルフォルダを削除しました。その後、同じプロジェクトの新しいフォルダを使って既存のgitリポジトリに更新したいと思います。その後、私はそれを次の手順で解決しました。

手順

git init 
git add --all 
git commit -am "re-init" 
git remote add origin https://github.com/{yourgit}/{yourproject}.git 
git push --force origin master 
関連する問題