2

私はGitにかなり慣れていないので、開発リポジトリにどのワークフローと構造を使用したいかを知る前に、Gitをいじっていました。リモートリポジトリを置き換えるために使用したいローカルリポジトリを作成しました。現在、それを使用しているのは私だけです(ただし、別のマシンでクローンを作成しました)。

基本的に、私は新しいローカルリポジトリを作成し、それを思い通りに作成しました。ここに記載されているように、リモートリポジトリにプッシュして古いリポジトリを上書きしました。 リモートリポジトリをローカルコミットで上書きするにはどうすればよいですか?...オリジンの代わりにURLを使用したことを除いて。

次に、リモートリポジトリを追加し、それが機能するかどうかを確認しました。

$ git remote add origin <url>

私は完全な歴史を見て、次のようなものになりました:

gitk --all

大野!だから私はリモートを削除し、変更はありません。今、私はこの切り離された歴史と存在しない枝を持っています。それで私はこれを試しました:Gitから無効なリモートブランチ参照をどのように削除しますか?

それは役に立たなかった。

$ git remote show

空に表示されます。これを元に戻す方法はありますか?リモコンを追加するだけで、作業ディレクトリがこれほどひどく台無しになる可能性があるのか​​わかりません。

編集:古い履歴に新しいブランチと同じではないブランチが1つあることに気づきました。また、リモートリポジトリを追加した後にフェッチしました。私は古い枝を見ることができます

$ git reflog --all

そしてそれはとして現れます

16903f4 refs/remotes/origin/feature/test-feature@{0}: fetch origin: storing head
4

2 に答える 2

1

ローカル履歴をリモート履歴とマージしますか、それとも単にそれらの1つを保持しますか?

a)それらをマージする場合は、最初に2つの履歴を接続する必要があります。それならあなたは友達だrebase--root思います。

--root。で制限するのではなく、から到達可能なすべてのコミットをリベースします。これにより、ブランチのルートコミットをリベースできます。--ontoと一緒に使用する必要があり、(の代わりに)にすでに含まれている変更をスキップします。--preserve-mergesと一緒に使用すると、すべてのルートコミットは、代わりに親として持つように書き直されます。

http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html

b)たとえば、ローカルの変更のみを保持し、リモートの変更のみを削除する場合は、リモートの参照を削除するだけです。

 git push origin :badbranch

さらに詳しい説明が必要な場合はお知らせください。

于 2013-01-30T18:28:45.380 に答える
0

同じ名前のリモートを追加し、類似していないリモートブランチを削除することで修正しました。より良い解決策は、手動でブランチを削除しないことだと思います(私はすでに使用したいリポジトリと履歴を持っています)が、少なくとも私の問題は修正されています!

  1. リモートリポジトリが削除された場合

    $ git remote add <same remote name> <url to the repo>
    
  2. 「新しい」リポジトリにない古いリモートブランチを削除します

    $ git push <same remote name> --delete <branch name>
    
于 2013-01-30T17:33:34.107 に答える