Объединить только последний коммит из ветви в мастер - PullRequest
0 голосов
/ 08 мая 2019

Я сделал тестовое хранилище, используя следующие команды

mkdir test-repo
cd test-repo/
git init

Я сделал файл в каталоге и зафиксировал изменения

echo 0 > file.txt
git add file.txt
git commit -m '0'

Я сделал новую ветку для разработки

git checkout -b A

Теперь файл изменен в ветви A, в следующей строке добавлено '1'

file.txt
0
1

зафиксировано в ветви A

git add file.txt
git commit -m '1'

Добавлен пустой новый файл file1.txt в 'A'. Затем совершил

git add file1.txt
git commit -m 'new file'

Теперь команда reflog показывается как

76633b7 (HEAD -> A) HEAD@{0}: commit: new file
070f015 HEAD@{1}: commit: 1
dfab60f (master) HEAD@{2}: checkout: moving from master to A
dfab60f (master) HEAD@{3}: commit (initial): 0

Теперь я хочу объединить ветвь А с мастером, используя только коммит с '76633b7' (последний). Я не хочу 'commit: 1' (070f015) в мастере. Как я могу это сделать?. git merge A передаст все изменения мастеру.

Ответы [ 3 ]

2 голосов
/ 08 мая 2019

Существует два сценария.

1) Вы хотите объединить только последний коммит (76633b7) с мастером.- В этом случае просто выполните следующие действия:

 i)  git checkout master
 ii) git cherry-pick 76633b7

2) Требуется все из ветви A в master, кроме второго последнего коммита.- Это немного сложно, в этом случае вы должны выполнить следующие действия:

 i) Change the order of last and second last commit


  git rebase -i HEAD~2

  Next, change the order of the commits in the prompt.

  pick 76633b7 
  pick 070f015

  to 

  pick 070f015
  pick 76633b7 

Теперь ваш второй коммит находится сверху, а все остальное, что вы хотите объединить, ниже второго коммита.

ii) Теперь вы можете просто объединить, используя идентификатор коммита вашего старого первого коммита (который сейчас второй)

git merge 76633b7
0 голосов
/ 08 мая 2019

Вы можете указать идентификатор ревизии для вишни (как уже было сказано), но если вы попросите вишню ветку , только последняя ревизия будет выбрана вишней, так что это будет работать а также:

git checkout master
git cherry-pick A
0 голосов
/ 08 мая 2019

Нет простого решения для этого. Ваш коммит 76633b7 опирается на коммит 070f015 и теоретически может зависеть от того, что вы там сделали.

Что вы можете сделать:

git checkout -b B master # create a new branch B from master
git cherry-pick 76633b7 # apply the commit 76633b7 and resolve conflicts if any

теперь ветвь B содержит только коммит, который вы хотите объединить с master.

...