я сделал следующее:как мерзавец вишневого выбор совершить декларирование наша история содержит его
git fetch upstream
git cherry-pick xyz
отборные коммит был применен чисто за исключением того, что в одном из файлов, которые он имел точно такие же изменения, которые я имел уже сделанные в предыдущем фиксации, чтобы эти изменения не были повторно применены.
Все с точки зрения кода в порядке, но я хотел бы иметь хеш фиксации в своей истории. В моей истории появляется новое имя. Возможно ли это? Насколько я читаю стратегию git merge «ours», кажется, что это вообще возможно, но как это сделать для одной фиксации?
Я хочу, чтобы это стало легче идентифицировать позже, что совершает upstream
, что у меня нет. На данный момент в github network
вид Я вижу, что выбранная вишня фиксация является чем-то отдельным, что у меня нет.
Дополнительная информация: Что говорит @CharlesB, имеет смысл для меня. Но как же делает merge -s ours
волшебство? В этом случае для меня не было cherry-pick
. Потому что изменение, которое я хотел принять, это только один и на конце upstream/master
. Так что просто попробовать его я сделал: git merge -s ours upstream/master
Теперь делать git log --graph --pretty=oneline --abbrev-commit
я вижу что-то вроде:
* 9e8108b Merge remote-tracking branch 'mgencur/master' for better github netw
|\
| * aa7117d Fix displaying watchers/watching for incorrect user // this commit magically appeared after merge -s ours
* | ff05f8c Fix displaying watchers/watching for incorrect user // this is commit from cherry-pick of aa7117d
* | b7ca8ec older commit in my fork
* | <more commits in my fork>
|/
* 94d6870 Fix obtaining available users for testing purposes
* <older commits of upstream/master>
То же команды до тогоgit merge -s ours
смотрел, как:
* ff05f8c Fix displaying watchers/watching for incorrect user // this is commit from cherry-pick of aa7117d
* b7ca8ec older commit in my fork
* <more commits in my fork>
* 94d6870 Fix obtaining available users for testing purposes
* <older commits of upstream/master>
Как вы можете см. после сбора вишней фиксации aa7117d, не было никаких указаний на то, что aa7117d уже применяется к моему реплику fork. Но после слияния указано, что он там, хотя ничего в моих файлах не изменилось.
Это заставляет меня думать, что действительно возможно объявить ряд коммитов, включенных в ветку, хотя они не применяются точно, поскольку они были применены вверх по течению.
update2: Я вижу вопрос How to merge a specific commit in Git и его лучший ответ. Таким образом, объяснение, почему это невозможно или оно не реализовано, также было бы оценено.
Вы, кажется, смущены тем, что такое вишня и слияние. Первый применяет указанный фиксат к вашей текущей ветке. Это как сокращение для экспорта патча-файла, а затем его применения. Больше ничего. Последний также создает новую фиксацию, но у нее есть ** две родительские коммиты **. Таким образом, никакая фиксация не будет * исправлена * поверх другой ветки, это больше похоже на привлечение к разработке нитей вместе в один. Вот почему вы видите исходные хеш-строки в истории, но это только потому, что они на самом деле все еще существуют, неизмененные из их исходного состояния. –
@ Michael-Wild, да, я бы хотел какую-то комбинацию слияния/вишни. – akostadinov
, который никогда не будет работать. Это просто не то, как работает Гит. Хэши однозначно идентифицируют фиксацию, и если вы измените ее фиксацию родителя, хэш должен измениться. Вот почему хеши фиксации считаются * криптографически безопасными * в Git. Если вы можете проверить хэш ветви ветви, вы эффективно проверили всю ее историю. Любая операция, которая изменяет эту историю, изменит хеши. Период. –