2013-12-06 6 views
3

Фон: У меня есть две ветви, мастер и стабильный, с множеством коммитов на хозяине, которые не на стабильном уровне. Я хочу, чтобы вишня выбрала ряд этих коммитов для стабильности, а затем смогла использовать git log --merges-only stable..master, чтобы увидеть, что осталось.Могу ли я использовать git cherry-pick <sha> 'и есть ли git log foo..bar?

Однако, если я просто вишневый, git рассматривает их как две коммиты, и поэтому команда «git log» не помогает. Например. С учетом этого:

# create a repo 
mkdir cherry 
cd cherry 
git init 

# add a commit on master 
touch foo.txt 
git add foo.txt 
git commit -a -m 'commit 1' 

# create a stable branch 
git checkout -b stable 

# add two more commits to master 
git checkout master 
touch bar.txt 
git add bar.txt 
git commit -m 'commit 2' 
touch baz.txt 
git add baz.txt 
git commit -m 'commit 3' 

# cherry-pick just one of those commits to stable 
git checkout stable 
git cherry-pick master 

Тогда, я хотел бы быть в состоянии увидеть, что коммиты являются кандидатами на будущий вишневый сбор на хозяине, в идеале используя git log, но это не реально ответить на мой вопрос:

> git log stable..master --pretty=oneline --no-merges 
01550adab8993ceb1eec7bbc7a0e3de3550d63fc commit 3 
8a3ea27aa50c887b603296bb9d4a36ccbfa35311 commit 2 

Однако TIL о git cherry:

> git cherry stable master 
+ 8a3ea27aa50c887b603296bb9d4a36ccbfa35311 
- 01550adab8993ceb1eec7bbc7a0e3de3550d63fc 

Где записи с префиксом «+» являются кандидатами на будущее вишневого сбор.

+0

Git рассматривает их таким образом, потому что они * являются * два различных фиксаций :-) ... 'вишневого pick' дифференциалы«выбрал вишневый»против своего родителя, а затем применяет это же изменение в 'HEAD' как новое коммит. То, что вам нужно (что git действительно предоставляет), состоит в том, чтобы сравнить * изменения *, сделанные, по-парному; см. ответ Магнуса Бэка. Обратите внимание, что это справедливый бит вычислительной работы (git должен вычислять различия, так же как и в команде 'cherry-pick', но теперь это нужно сделать для каждого фиксации вдоль вилки, а затем сравнить их все! быстро для того, что он делает, хотя). – torek

ответ

3

Команда git cherry предназначена для этой цели.

0

Try перебазирование устойчивы к хозяину после того как вы вишня всем коммитов вы хотите:

git checkout stable 
git rebase master 
+0

Это принесет * все * изменения от мастера к стабильному, что я просто не могу сделать. Я хочу взять с собой горсть, а затем использовать «git log» (или что-то еще), чтобы показать мне, что осталось, опустив коммиты, которые я уже выбрал. – Kylo

+0

@ Kylo Вы можете внести тривиальное изменение, чтобы получить 'git checkout --detach stable' (проверяет точно такой же код, как' git checkout stable', но оставляет вас с отсоединенным HEAD), а затем запускает точно 'git rebase master' вот в этом ответе и, наконец, проверьте 'git log master..HEAD'. Вы можете по желанию сделать это на временной ветке вместо использования отдельной главы. – hvd

0

Я не уверен, поможет вам это или нет, но вы можете посмотреть мой сценарий git-missing. Он имитирует команду bzr missing Bazaar. Он покажет вам дополнительные фиксации, которые у вас есть в вашем филиале, а затем коммиты, отсутствующие в другой ветке. Это учитывает вишневый выбор.

Например:

$ git missing master 
You have 1 extra revisions 
-------------------------- 
0db6b7c Call SetupSource for .zsh files. 

You have 1 missing revisions 
---------------------------- 
70f9f42 Add clojure snippets. 

 Смежные вопросы

  • Нет связанных вопросов^_^