web-dev-qa-db-ja.com

比較するものは何もありません。比較するものはありません。ブランチはまったく異なるコミット履歴です

マシンにCMSテーマがインストールされています。 gitを介して変更を追跡しており、GitHubにバックアップして、それらの変更を共有できるようにしました。

提供されているテーマはGitHubでも入手できます。私のマシンでは、これをリモートのアップストリームとして追加しました。これで、次のコマンドを使用して、マスターとリモートアップストリーム間の変更を簡単に確認できます。

git diff --color master upstream/number

GitHubにリモートアップストリームを追加できれば、これらの変更を簡単に共有できます。 GitHubでこの関係を設定することは可能ですか?

私は次を試しました:

git Push -u Origin upstreambranch

gitHubのマスターにupstreambranchを追加します。ただし、両方のブランチを比較しようとしてもうまくいきません。GitHubで得られる結果は、「比較するものが何もない」ということです。

これらを比較する別の方法はありますか?

26
Jack

短い答え

これらは実際にはまったく同じ履歴を共有しないため、GitHubではブランチを比較できないようです(同じファイルとコードの多くを共有している場合でも。

リポジトリから作成した一時的なフォークのスクリーンショットを次に示します。ここでは、説明したようにmasterupstreambranchを比較しようとしました。エラーメッセージに注意してください。

Error message screenshot

それは言います:

比較するものは何もありません。

masterupstreambranchは完全に異なるコミット履歴です。

長い答え

おそらく元のソースをダウンロードして、元のリポジトリを複製するのではなく、完全に新しいリポジトリに追加したのでしょうか?そうすることで、レポジトリの履歴が元のレポジトリの履歴と完全に異なるになるようになります。新しいリポジトリには、同じsha IDを持つ同じコミットはありません。

masterブランチとupstreambranchの逆ログを実行することで確認できます:

# Your first commit, see commit sha
git log --reverse master
commit c548d7b1b16b0350d7fbdb3ff1cfedcb38051397 # <== HERE
Author: Padraic Stack <[email protected]>
Date:   Wed Apr 2 15:11:28 2014 +0100

    First commit of everything

# First commit sha of the original repo
git log --reverse upstreambranch
commit 105a12817234033c45b4dc7522ff3103f473a862 # <== THERE
Author: Jeremy Boggs <[email protected]>
Date:   Mon Feb 22 16:00:53 2010 +0000

    Creates repo directories for the Seasons theme.

解決策

元の履歴の上でコミットをやり直すと、ブランチを比較できるようになります。コミットをやり直すことができるいくつかの異なる方法があります。

git rebase --onto

そして

git cherry-pick

必要に応じて、各コミットを手動でやり直すこともできます。

36
user456814

これはgithub側では望ましくない動作のように見えますが、修正するのはかなり簡単です。あなたがしたいのは、既存の履歴の合理的な(any合理的な)コミットに基づいてブランチをリベースすることです。あなたができることは、githubリポジトリを取得し、その履歴でどのツリーがあなたが始めたものに最も似ているかを見つけることです。この方法で開始します。

git remote add github u://r/l
git fetch github

myroot=`git rev-list master --max-parents=0`
root_tree=`git rev-parse $myroot^{tree}`

github_base=`git log --pretty=%H\ %T github/master | sed -n "s/$root_tree//p"`

運が良ければ、GitHubの履歴でコミットしたものを見つけることができます。これには、最初に使用したツリーが含まれています。仮定すると、

git rebase --onto $github_base $myroot master 

これで完了です。


一致するツリーが見つからない場合、最も近い近似を見つけることができます。違いの大まかな見積もりを取得する1つの方法を次に示します。

git log --pretty='echo %H $(git diff-tree -p -b -U0 '$myroot:' %T|wc -l)' github/master \
| sh

github/master履歴の各コミットのツリーとルートツリーの間の最小化された差分の行をカウントします。 Niceの小さな違いを期待するのは理にかなっているようです。github_base commitを呼び出して上記のリベースを行う前に、実際の差分を確認できます。


6
jthill

どのコミットの問題が開始されたかがわかっている場合は、ブランチをそのコミットにリセットしてからマージできます。

2
mrserfr

これは昨日、元のレポジトリからコードをダウンロードし、フォークされたレポジトリにプッシュしようとしたために発生しました。

溶液:

以前のリポジトリを削除してレポを単純に再構成し、フォークされたレポから新しいフォルダにレポを複製します。

ファイルを新しいフォルダー内の古いファイルで置き換え、それをプッシュしてレポし、新しいプルリクエストを実行します。

1
Lakshay

提供された回答のどれも実際に私のために機能しなかったことがわかりました。実際に私のために働いたことは、することです:

git Push --set-upstream Origin *BRANCHNAME*

新しいブランチを作成した後、それは適切に追跡されます。 (Git 2.7.4があります)

0
AnthonyC

リモートの履歴と一致しないローカルリポジトリからリモートリポジトリにプッシュする問題がありました。これは私のために働いたものです。

レポジトリをローカルに複製したため、レポジトリの新しいコピーで作業していることがわかりました

git clone Your_REPO_URL_HERE.git

リモートにアクセスしようとしているブランチに切り替えます:

git checkout Your_BRANCH_NAME_HERE

元のリモートを追加:

git remote add upstream Your_REMOTE_REPO_URL_HERE.git

git fetchとgit pullを実行:

git fetch --all

git pull upstream Your_BRANCH_NAME_HERE

マージの競合がある場合は、で解決します

git mergetool kdiff3 

または選択した他のマージツール。

競合が解決して保存されたら。変更をコミットしてプッシュします。

次に、元のgitub.comリポジトリに移動して、プルリクエストの作成を試みます。プルリクエストを作成するオプションがあり、「比較するものはありません。ブランチは完全に異なるコミット履歴です」を表示しないでください。

0
Chris Adams

SVNからGitHubにアプリケーションを移行していて、SVNからチェックアウトされたソースコードの場所でgit initを呼び出すだけでは不十分であるため、このエラーメッセージが表示されましたが、 git svn cloneすべてのコミット履歴を取得します。このようにして、GitHubの2つのソースコードには相互の履歴があり、プルリクエストを開くことができました。

0
Adam Bodrogi

開始時にリポジトリを複製する代わりに、ダウンロードしたのはおそらくトップガイです。技術的になりすぎない簡単なソリューションを次に示します。

  • 新しいエディターウィンドウで、リポジトリを別のディレクトリに複製します。
  • 新しいブランチを作成します。
  • 次に、コピーペーストで、編集したエディターウィンドウから新しいリポジトリにコピーします。

古いgithubブランチを見て、すべての編集がコピーされていることを確認してください。

0
JSkyS

ここに同じケースがあるとは思わない、それでも誰か他の人が役立つと思うかもしれない

私に同様のエラーが発生したとき、それは最初のマージと最初のコミットになるでしょう。オンラインリポジトリには何もありませんでした。したがって、比較するためのgit-hubにはコードがありませんでした。

単に空のリポジトリを削除し、同じ名前の新しいリポジトリを作成しました。そして、エラーはありませんでした。

0