Как "вытащить запрос" конкретное коммит
У меня есть конкретная фиксация, которую я хотел бы внести в репозиторий, который я разветкил на github.
Я предполагаю, что механизм для этого - "запрос на тяну".
Однако, когда я пытаюсь это сделать, я могу запросить только всю свою ветку.
Я не хочу тянуть запрос на другие коммиты, поскольку они не имеют отношения к делу.
Любая идея, как я могу это сделать.
![repo Я хочу отправить запрос на.]()
Последний фиксатор b50b2e7 является единственным коммитом, который я хочу отправить запросу.
В любом случае, я могу это сделать или все зависит от друг друга?
![commit Я хочу вывести запрос]()
Ответы
Ответ 1
Создайте новую ветвь с этим изменением:
$ git fetch --all
$ git checkout -b my-single-change upstream/master
$ git cherry-pick b50b2e7
$ git push -u origin my-single-change
Затем создайте PR из этой ветки.
Вышеизложенное предполагает, что вы установили upstream
в качестве пульта. Если нет, сделайте это сначала:
$ git remote add upstream https://github.com/konradjk/exac_browser.git
Ответ 2
Я не знаком с вишневым пикером, и у меня возникла проблема, когда я попробовал подход Джозефа (что-то о том, что вишневый пирог пустой) Я нашел обходной путь, который, кажется, работал хорошо:
# Create new branch directly from specified commit:
$ git checkout -b my-single-change b50b2e7
$ git push --set-upstream origin my-single-change
Теперь вы можете выбрать эту ветку в GitHub и создать пул-запрос.
Ответ 3
У меня была та же ошибка AlwaysCurious, поэтому я немного покопался. 1
Обычный случай
A - B - C [master]
\
D - E - F - G [feature]
Вы работаете над проектом, вы используете отдельную ветвь (feature
) для DEFG
изменений (DEFG
) и хотите создать запрос на извлечение. Однако вы хотите, чтобы только некоторые коммиты были включены в запрос на извлечение (E
и F
)
Процедура здесь та, от Джозефа ответ
# optional: set upstream as remote if it not
git remote add upstream https://github.com/<upstream_github_username>/<upstream_github_repo_name>.git
# fetch changes
git fetch --all
# create specific branch for your partial pull request
git checkout -b partial-change upstream/master
Вот как это выглядит:
[partial-change]
A - B - C [master]
\
D - E - F - G [feature]
Cherry-выберите ваши конкретные коммиты и внесите изменения:
git cherry-pick <hash of commit E>
git cherry-pick <hash of commit F>
git push -u origin partial-change
После устранения любого конфликта вы получите следующее:
E1 - F1 [partial-change]
/
A - B - C [master]
\
D - E - F - G [feature]
Последовательный случай
Если вместо этого вы просто хотите применить все последовательные коммиты до последнего (или двух, или трех), вы можете просто перейти к конкретному коммиту. Например, здесь я просто хочу коммиты до E
а не последующие:
git checkout -b partial-consecutive-changes <hash of commit E>
git push -u origin partial-consecutive-changes
A - B - C [master]
\
D - E [partial-consecutive-changes]
\
F - G [feature]
Ошибка новичка
Последняя процедура также может помочь вам, если вы просто применили последовательные изменения к мастеру, не используя для них определенную ветвь, и теперь вы хотите выбрать их после. Это актуально, если вы разветкили проект на C
и продолжили работу над другими коммитами. Здесь я добавляю звездочку, чтобы сигнализировать, что на вилке происходят новые изменения:
A - B - C - D* - E* - F* - G* [master]
Что вы не должны делать, это:
git checkout -b partial-change upstream/master
git cherry-pick <hash of commit D>
git cherry-pick <hash of commit E>
git push -u origin partial-change
В этом случае вы пытаетесь разветкить мастера в G*
и вишня, выбирающая предыдущие коммиты, получит вам предупреждение:
Предыдущая вишня теперь пуста, возможно, из-за разрешения конфликта.
так как вы добавляете те же старые коммиты в новую ветку.
Что вы должны сделать вместо этого:
git checkout -b partial-change <hash of commit E>
git push -u origin partial-change
A - B - C - D* - E* - F* - G* [master]
\
D* - E* [partial-change]
После этого вы готовы сделать пул-запрос только с выбранными коммитами.
Заметки:
-
Здесь я продолжаю этот замечательный ответ от Шверна.
-
Для получения последних n
хэшей коммитов может быть полезно использовать: git log --pretty=oneline --abbrev-commit | head -n
git log --pretty=oneline --abbrev-commit | head -n