2011-04-02 21 views
1

自分のgitリポジトリ( "main"から編集されたファイル)で間違いを犯しました。 "git push -f"を使用して、私の "main"リポジトリにローカルリビジョンを受け入れる必要がありました。私はリモートのメインリポジトリに戻り、gitのステータスを出しました。Git:以前にコミットされた変更が表示されるのはなぜですか?

私は、コミットする変更が古く、実際のローカルリポジトリステータス(-fを押したもの)を反映していないことがわかります。ですから、私がメインでgit commitをしてもうまくいきますが、2つのリポジトリが異なります。

新しい標準Gitのプッシュがエラーを示しているので、状況が解決されない:

私のメインのレポは私のローカルコピーと同じ内容を持つように、これは解決することができますどのように
! [rejected]  master -> master (non-fast-forward) 

答えて

2

通常、非裸のリポジトリ、つまり作業コピーが添付されているリポジトリには、git pushは実行しないでください。その理由は、git pushは作業ディレクトリを更新しないため(確実にこれを行うことはできません)、HEADのブランチとの同期が外れたり、作業コピーとの同期が外れたりするためです。

いくつかのリポジトリにプッシュしたい場合は、これを作業コピーなしの裸のリポジトリにします。それ以外の場合は、fetchpullを使用してリポジトリの変更を取得します(このリポジトリ自体で使用されます)。

+0

私は以前はSubversionユーザーでしたが、gitで多くの経験がありませんでした。そのため、私はこの間違いを犯しました。私のコードをgit initでコピーしたものから、私の主なものになるリモートのreposを作成したことです。あなたは私のリモートサーバのリポジトリを再作成するべきだと思いますか?それを裸のものにしていますか? Btw、どうやって裸の作品ですか?ファイルの変更を追跡する内部データベースの種類はありますが、直接編集することはできません。 – Spyros

+0

"ベアリポジトリ"は、svnで単にリポジトリを呼び出すことです。つまり、サーバ上に置かれているものです(もちろん単純すぎます)。非ベースのリポジトリはあなたの作業コピーに使われます(gitには履歴も含まれています)。 –

+0

ローカルリポジトリにすべてのコード(必要なすべてのリビジョンを含む)があれば、 'git clone --bare'(そこからローカルリポジトリにアクセスできる場合)を使って" main "を再作成することができます。さもなければ、新しい 'git init --bare'を行い、あなたのローカルから' git push'を使います。 –

関連する問題