短いバージョン:私はmaster
、人々が取り組んでコミットしているブランチを持っています。それから私はからのブランチを持っています、それを人々がまた取り組んでいてコミットしているものとmaster
呼んでください。定期的に、すべてではありませんが、一部の変更を元に戻しfoo
たいと思います。の履歴をクエリ可能にして、からのコミットの有無を確認できるようにしたいと思います。これには問題があるようです。どうすればよいですか?foo
master
master
foo
長いバージョン:次のようなサンプルのgitリポジトリを作成します。
cd /tmp && mkdir gitrepo && cd gitrepo/ && git init
echo "Something shared" > myFile.txt && git add myFile.txt && git commit -m "Added myFile.txt to master"
git checkout -b foo master
echo "Something else shared" > anotherFile.txt && git add anotherFile.txt && git commit -m "Added anotherFile.txt to foo"
echo "Something specific to foo" > foochange.txt && git add foochange.txt && git commit -m "Added foochange.txt to foo"
echo "Something else shared again" > yetAnotherFile.txt && git add yetAnotherFile.txt && git commit -m "Added yetAnotherFile.txt to foo"
git checkout master
echo "Something specific to master" > masterchange.txt && git add masterchange.txt && git commit -m "Added masterchange.txt to master"
echo "Specific to master" > masterchange.txt && git add masterchange.txt && git commit -m "Added masterchange.txt on master"
(これ以降のすべての説明は、私たちが参加していることを前提としていますmaster
)
foo
これで、 2つのコミットが遅れ、3つのコミットがあるという状況になりましたmaster
。foo
この時点で、最初と3番目のコミットをからに戻したいのですが、2番目master
のコミットは戻しません。
基本的な問題は、先頭のコミットの親がマージしたくないfoo
コミットであるということですが、コミットの親はそのコミットのハッシュの一部であるため、先頭のコミットのハッシュを保持する方法はありません。マスターに当てはまる状況を作り出すことなく。foo
git branch --contains foo^
たとえば、私がそうすると、からへgit merge foo
のすべてのコミットがマージされます。それをした後、私は言うことができるでしょう、そしてそれは両方とも言うでしょうそしてそのコミットを含みます。それから試してみましたが、それでもを含むレポートを作成しました。foo
master
git branch --contains foo^
foo
master
git revert foo^
git branch --contains foo^
master
foo^
関連する2つのリビジョンの場合git cherry-pick foo foo^^
、これら2つのリビジョンの差分からの変更がfoo
適用されますmaster
が、git branch --contains foo^
ブランチにのみfoo
そのコミットが含まれていると言います。
ここで達成しようとしているのは、履歴をクエリする方法です(コミットメッセージにテキストとして保存されているハッシュを手動で相互に関連付けることなく)。これにより、マスターにマージされたコミットとマージされていないコミットを確認できます。前述のように、マスターの状態を自分が望むものと同等にするためのいくつかの方法(cherry-pick、merge + revert、format-patch / am、diff / patchなど)を知っています。必要な情報について履歴を照会する方法。私はそれgit branch --contains
がおそらく私が望むようには機能しないだろうと思いますが、私が考えていなかった履歴を照会する別の方法があれば、私はすべての耳です。
誰かアイデアはありますか?