3

github私は(「ProjectX」と言って)プライベートリポジトリを持っています。プロジェクトの要件が途中で変更されたため、コードを書き直す必要がありました。「ProjectX」ですでに行われた進行状況を失いたくなかったので、次のことを行いました。

  1. ローカル リポジトリで "ProjectX" を "ProjectX_advanced" に名前変更しました。
  2. リモートオリジンの名前を次のように変更しました。

git remote rm origin
git remote add origin git@github-user:user/ProjectX_advanced.git
また、GitHub のプロジェクトの名前を変更しました。
これは成功しました。ターミナルで実行git remote -vすると、次のようになりました。

origin  git@github-user:user/ProjectX_advanced.git (fetch)
origin  git@github-user:user/ProjectX_advanced.git (push)  

上記のリポジトリに変更をプッシュすることもできます。
3. github に「ProjectX」という名前の新しいレポを作成しました。
4. ローカル リポジトリに「ProjectX」という新しいプロジェクトを作成しました。
5. 次のように git を初期化しました: 6. 次のように新しいリモート オリジンを追加しました:コマンド ラインでこれを 行うと、正しいリモート ロケーションが取得されます。 7. ローカル リポジトリの変更を github リポジトリにプッシュしようとすると、次 のエラー メッセージが表示 されて問題が発生します。
git init
git add .
git commit -m "First commit" .


git remote add origin git@github-user:user/ProjectX.git
git remote -v

git push origin master

To git@github-user:user/ProjectX.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github-user:user/ProjectX.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.   

以前のいくつかの質問をここここgit pullで見ました。また、これらの変更をプッシュする前にマージを実行する必要があることを示す他の質問もいくつか見ました。
私の質問:
1. を実行するgit pullと、新しい "ProjectX" が不要なコードによって上書きされます。どうすれば回避できますか?
2. すべてのリモコンの名前を変更しました (からの出力git remote -vは期待どおりです)。リモコンの名前を変更し忘れたことがありますか?
3. これを解決するにはどうすればよいですか?

4

3 に答える 3

1

ProjectXGitHubの新しいリポジトリは空である必要があります、ただし、それを複製して、その複製から作業を開始してください (ローカルで初期化して GitHub の新しいリポジトリにプッシュするのではなく)。

そうすれば、クローン中に、新しいProjectXリポジトリが実際に空であることを確認できます。
...そうではないかもしれません!

OP Sriramの回答は、README.mdGitHub 側でのリポジトリの初期化中に GitHub によって作成されたものがあることを示しています。


さらに、「GitHub のリポジトリの名前を変更するにはどうすればよいですか?」で述べたように、2013 年 5 月以降、 GitHub のリポジトリの名前を変更すると、次のようになります。

このような状況では、以前のリポジトリの場所に対するすべてのリクエストを新しいホームに自動的にリダイレクトします。

それがここで発生する可能性があり、プッシュが (namemed) で終了する可能性がありますProjectX_advanced
GitHub が古い名前の新しいリポジトリがあることを認識し、ProjectXへのリダイレクトを削除すると、すぐに解決されるはずProjectX_advancedです。

于 2013-09-28T11:58:24.333 に答える
0

@VonC の提案に従い、次のProjectXように別のローカル ディレクトリに複製しました。
cd destDir (directory where a clone of ProjectX should be created)
git clone git@github-user:user/ProjectX.git

これによりクローンが作成され、GitHub でも ProjectX が本当に空であることが示されました。の内容はProjectXREADME.md ファイルと gitignore ファイルでした。これらの変更をリポジトリにプルしても、Readme.md が追加されて gitignore が変更されるため、大きな違いはありません。次のように変更を
git pull origin masterプルします。ローカルの ProjectX ディレクトリで、上記の 2 つのファイルを更新しました。その後、を使用して変更をプッシュできましたgit push origin master

于 2013-09-28T19:21:17.567 に答える