Как я могу набрать sh коммитов, которые я уже слил? - PullRequest
1 голос
/ 21 января 2020

Я только что слил PR для своего репозитория GitHub. Но - я хочу принять во внимание различные коммиты, которые вошли в этот пиар. Я думал, что смогу сделать это просто

rebase -i <hash-of-first-commit-in-the-PR>^

, но это не делает то, что я ожидал - коммиты, которые я вижу в списке в редакторе перебазирования, не те, которые я вижу в git log; и, в частности, коммиты, которые я хочу использовать вместе sh, отсутствуют.

Оглядываясь назад, мы видим часть графика фиксации:

* hash11 (HEAD -> development, origin/development) Lorem ipsum dolor sit amet
*   hash10 Merge pull request #123 from someone/development
|\  
| *   hash09 Merge branch 'development' into development-fork
| |\  
| |/  
|/|   
* | hash08 consectetur adipiscing elit
* | hash07 sed do eiusmod tempor incididunt
* | hash06 ut labore et dolore magna aliqua
* | hash05 Ut enim ad minim veniam
* | hash04 quis nostrud exercitation ullamco laboris nisi
* |   hash03 Merge pull request #101 from someone/development
|\ \  
| | * hash02 ut aliquip ex ea commodo consequat.
| |/  
| * hash01 Duis aute irure dolor in reprehenderit in voluptate velit esse
|/  
* hash00 cillum dolore eu fugiat nulla pariatur.

Объединение PR это совершить хэш10. Он ввел два коммита "кем-то", hash09 и hash02. Мясо того, о чем я забочусь, это hash02. Глядя на этот график, я понимаю, что моя ситуация сложнее, чем я первоначально описал. Возможно, мне даже следует пытаться втиснуть sh hash09 в hash02, хотя в "чьей-то ветке" они были простыми последовательными коммитами?

PS - Естественно, я не возражаю против насильственного вторжения в GitHub.

1 Ответ

1 голос
/ 21 января 2020

давайте предположим, что совет PR называется PRx ... давайте также предположим, что ревизия другой ветви (master?) Перед слиянием находится перед слиянием (другая ветвь ... или вы можете использовать ID ревизии) .

Вы можете сделать это так:

git checkout PRx
git reset --soft $( git merge-base HEAD pre-merge ) # set the branch pointer where I started working on my PR, all changes are on index ready to be committed
git commit -m "Squashed commits"
# PRx is now on this new squashed revision by the way
# and you don't want to do another merge effort, right? Maybe there were conflicts and so on... so
git branch new-merge $( git commit-tree -p PRx -p pre-merge -m "Merge" old-merge-revision^{tree} ) # old merge revision is the original merge revision you did when the branch was not squashed
# now we have a new merge revision on branch new-merge
# feel free to point another branch over here and do push -f
...