Слить изменения в исправленном коммите из удаленной ветки? - PullRequest
0 голосов
/ 20 сентября 2019

В настоящее время у меня открыт PR в репо, где сопровождающий предпочитает, чтобы все PR были единым коммитом.Это сильно влияет на мой рабочий процесс при внесении изменений по запросу от сопровождающего.У меня есть рабочий стол и ноутбук, с которого я работаю.

Возможно, это не правильная идея, но я считаю мой рабочий стол "домашней базой" или "оригинальной" машиной.Мой ноутбук всегда отслеживает удаленные ветви, которые произошли с этой машины

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

Рабочий стол на ветке с одним коммитом и открытым PR

# Make requested changes
> touch changes.txt
> git add changes.txt
> git commit --amend
> git push -f origin PR_branch

Это обновляет мой PR и запускает автоматическое тестированиескрипты.Теперь у меня длинная конференц-связь, на которую я должен пойти и все еще могу работать во время прослушивания, поэтому я беру свой ноутбук и перехожу к своему репо на ветке, которая отслеживает ветку, которую я только что нажал на

Ноутбук на ветке, отслеживающий удаленную ветку с исправленным коммитом

> git pull origin PR_branch
From gitlab:user/repo
 * branch                PR_branch -> FETCH_HEAD
CONFLICT (add/add): Merge conflict in changes.txt
Auto-merging changes.txt
Automatic merge failed; fix conflicts and then commit the result.
> git status
On branch PR_branch
Your branch is ahead of 'upstream/devel' by 1 commit.
  (use "git push" to publish your local commits)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
    both added:      changes.txt

На данный момент я нашел единственный способ решить эту проблему, выполнив:

# Still on my laptop
> git checkout --theirs changes.txt
> git add changes.txt
> git commit -m "Fixed merge conflict between desktop and laptop"

Теперь я сделаю reset --hard для хэша предыдущего коммита, который является исправленным коммитом, который имеет самые последние изменения с моего рабочего стола.Мое интуитивное ощущение, что это совершенно не верно неправильно .

> git reset <previous commit hash> --hard

Теперь у меня есть обновленные изменения с моего рабочего стола на моем ноутбуке, и все кажется кошерным.Я делал это взад и вперед со своего рабочего стола -> ноутбук -> рабочий стол -> ноутбук -> рабочий стол (это много раз).Есть ли более идиоматический способ справиться с этим, я что-то напутал в своей истории git?

1 Ответ

0 голосов
/ 20 сентября 2019

Если вы используете обычное старое притяжение (например, то, которое сливается ), конечно ... вы стреляете себе в ногу, потому что вы вносите изменения в то, что вы сохраняете в вашей текущей ветке (ветке, из которой вы выполняете операцию извлечения, потому что вы уже объединили ревизии, которые теперь ушли в историю ветки, в которой вы внесли изменения).Git не может просто догадаться, что вы, возможно, удалили что-то из ветки только потому, что вы внесли изменения, а затем выдвинули «эй ... теперь я могу избавиться от этой ревизии, которая есть в моей истории».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...