マシンにCMSテーマがインストールされています。 gitを介して変更を追跡しており、GitHubにバックアップして、それらの変更を共有できるようにしました。
提供されているテーマはGitHubでも入手できます。私のマシンでは、これをリモートのアップストリームとして追加しました。これで、次のコマンドを使用して、マスターとリモートアップストリーム間の変更を簡単に確認できます。
git diff --color master upstream/number
GitHubにリモートアップストリームを追加できれば、これらの変更を簡単に共有できます。 GitHubでこの関係を設定することは可能ですか?
私は次を試しました:
git Push -u Origin upstreambranch
gitHubのマスターにupstreambranch
を追加します。ただし、両方のブランチを比較しようとしてもうまくいきません。GitHubで得られる結果は、「比較するものが何もない」ということです。
これらを比較する別の方法はありますか?
これらは実際にはまったく同じ履歴を共有しないため、GitHubではブランチを比較できないようです(同じファイルとコードの多くを共有している場合でも。
リポジトリから作成した一時的なフォークのスクリーンショットを次に示します。ここでは、説明したようにmaster
とupstreambranch
を比較しようとしました。エラーメッセージに注意してください。
それは言います:
比較するものは何もありません。
master
とupstreambranch
は完全に異なるコミット履歴です。
おそらく元のソースをダウンロードして、元のリポジトリを複製するのではなく、完全に新しいリポジトリに追加したのでしょうか?そうすることで、レポジトリの履歴が元のレポジトリの履歴と完全に異なるになるようになります。新しいリポジトリには、同じ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
必要に応じて、各コミットを手動でやり直すこともできます。
これは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を呼び出して上記のリベースを行う前に、実際の差分を確認できます。
どのコミットの問題が開始されたかがわかっている場合は、ブランチをそのコミットにリセットしてからマージできます。
これは昨日、元のレポジトリからコードをダウンロードし、フォークされたレポジトリにプッシュしようとしたために発生しました。
溶液:
以前のリポジトリを削除してレポを単純に再構成し、フォークされたレポから新しいフォルダにレポを複製します。
ファイルを新しいフォルダー内の古いファイルで置き換え、それをプッシュしてレポし、新しいプルリクエストを実行します。
提供された回答のどれも実際に私のために機能しなかったことがわかりました。実際に私のために働いたことは、することです:
git Push --set-upstream Origin *BRANCHNAME*
新しいブランチを作成した後、それは適切に追跡されます。 (Git 2.7.4があります)
リモートの履歴と一致しないローカルリポジトリからリモートリポジトリにプッシュする問題がありました。これは私のために働いたものです。
レポジトリをローカルに複製したため、レポジトリの新しいコピーで作業していることがわかりました
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リポジトリに移動して、プルリクエストの作成を試みます。プルリクエストを作成するオプションがあり、「比較するものはありません。ブランチは完全に異なるコミット履歴です」を表示しないでください。
SVNからGitHubにアプリケーションを移行していて、SVNからチェックアウトされたソースコードの場所でgit initを呼び出すだけでは不十分であるため、このエラーメッセージが表示されましたが、 git svn cloneすべてのコミット履歴を取得します。このようにして、GitHubの2つのソースコードには相互の履歴があり、プルリクエストを開くことができました。
開始時にリポジトリを複製する代わりに、ダウンロードしたのはおそらくトップガイです。技術的になりすぎない簡単なソリューションを次に示します。
古いgithubブランチを見て、すべての編集がコピーされていることを確認してください。
ここに同じケースがあるとは思わない、それでも誰か他の人が役立つと思うかもしれない。
私に同様のエラーが発生したとき、それは最初のマージと最初のコミットになるでしょう。オンラインリポジトリには何もありませんでした。したがって、比較するためのgit-hubにはコードがありませんでした。
単に空のリポジトリを削除し、同じ名前の新しいリポジトリを作成しました。そして、エラーはありませんでした。