В настоящее время у вас нет ошибки ветки при попытке синхронизировать форк с вышестоящим репозиторием.

Я сделал форк репозитория GitHub. Я исправил ошибку, написал тест и создал запрос на вытягивание, который был объединено с исходным репозиторием.

Все идет нормально.

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

Не полностью понимая, что я делаю, я копировал/вставлял команды git из других ответов StackOverflow. Но я не могу заставить его работать.

Вот как выглядит ситуация на данный момент:

$ git push
fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use

    git push origin HEAD:<name-of-remote-branch>
$ git status
rebase in progress; onto 4378fa4
You are currently rebasing branch 'master' on '4378fa4'.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        Tests/.vscode/

nothing added to commit but untracked files present (use "git add" to track)

Или визуально:

$ git log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'
* 46f5c0e (HEAD) Change to non-UTF8 locale C (ASCII only) inside test (BioGeek, 3 hours ago)
| *   fe24176 (master) merge changes from upstream (BioGeek, 3 days ago)
| |\
| |/
|/|
* | 4378fa4 (upstream/master) Thank Jerven for ExPASy URL updates (Peter Cock, 3 days ago)
* | 03de45c Update ExPASy tests for HTTPS (Peter Cock, 3 days ago)
* | 47cdbf7 Move expasy URLs to https (Jerven Bolleman, 4 days ago)
* | 9bfb8b1 replace expasy.ch by expasy.org (Jerven Bolleman, 4 days ago)
* | 1a32c50 Determine encoding for urllib handles from HTTP headers (Jeroen Van Goey, 3 days ago)
* | ccf88fc Tests do not require postgresql CREATE DATABASE permissions (Adhemar Zerlotini, 3 days ago)
| | *   6b7d235 (refs/stash) WIP on master: 6311677 remove Doc/examples/tree1.nwk which was committed accidentally (created during testing?) (BioGeek, 3 days ago)
| | |\
| |/ /
| | * 4ead5fa index on master: 6311677 remove Doc/examples/tree1.nwk which was committed accidentally (created during testing?) (BioGeek, 3 days ago)
| |/
| * 6311677 (origin/master, origin/HEAD) remove Doc/examples/tree1.nwk which was committed accidentally (created during testing?) (BioGeek, 3 days ago)
| * 41ff4cc Address flake8 warnings (BioGeek, 3 days ago)
| * 815bbfd Add encoding and prefic unicode string with 'u' (BioGeek, 3 days ago)
| * 0e7451d If the handle has a headers attribute, then use it's content charset as encoding. Otherwise fall back to the default behaviour. (BioGeek, 4 days ago)
| * 6a7d05b Add test for correct handling of encodings in Entrez.efetch. Also add some missing docstrings in other tests and close handles everywhere (BioGeek, 4 days ago)
|/
* 4ccdace mmCIF parser fix to check for both '?' and '.' as unassigned values (Joao Rodrigues, 5 days ago)

Набор изменений 46f5c0e — это улучшенный тест, из которого я хочу создать новый запрос на извлечение.

Как мне синхронизировать мой форк с вышестоящим репозиторием, чтобы я мог создать новый запрос на вытягивание?


person BioGeek    schedule 30.10.2017    source источник


Ответы (1)


Как указано в несколько полезном сообщении об ошибке git:

$ git status
rebase in progress; onto 4378fa4
You are currently rebasing branch 'master' on '4378fa4'.
  (all conflicts fixed: run "git rebase --continue")

Продолжить перемещение

Это означает, что вы, вероятно, git pull -r из исходной ветки или локально перемещаете ветку на другую ветку, и вы столкнулись с проблемой при попытке автоматического слияния (вероятно, конфликт слияния).

Когда git сталкивается с конфликтом слияния при попытке быстрой перемотки вперед, он прекращает перебазирование и ждет, пока пользователь исправит проблему вручную.

Как только это будет сделано, вам нужно подготовить измененные файлы, которые вы исправили (с помощью git add <pathspec>), но не делать коммит. Как только файл будет подготовлен, git узнает о ваших изменениях и попытается интегрировать их, когда вы git rebase --continue.

Продолжайте исправлять проблемы и git rebase --continue, пока не закончите. Это переместит вашу ГОЛОВУ на кончик вашей рабочей ветки. Затем вы можете нажать.

Альтернативно

Вы можете git rebase --abort отказаться от всего этого, что также отменит все исправления, которые вы сделали по пути, и попробовать другую стратегию слияния, например слияние с тремя сторонами.

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

Мой личный взгляд

Данный

Не полностью понимая, что я делаю, я копировал/вставлял команды git из других ответов StackOverflow. Но я не могу заставить его работать.

Я бы git rebase --abort начал с нуля. Если вы много раз останавливались и должны были исправить много конфликтов слияния, вы можете использовать git pull --no-ff <remote-name> <local-branch>, чтобы явно указать git не пытаться перемотать вперед, даже если это возможно.

Последний вариант

Если истории просто неуправляемы, а ваше изменение небольшое, вы всегда можете «отложить» свои изменения, то есть скопировать свою версию измененных файлов на свой рабочий стол а затем перезапишите вашу локальную ветку точным содержимым восходящей ветки. Затем просто скопируйте измененные файлы обратно в репозиторий и сделайте коммит.

Это не элегантное решение, но оно работает и иногда намного проще, чем управление длинной историей. Но вы потеряете коммиты, которые у вас были. Существует способ сохранить их с помощью исправление, если вам действительно интересно.

Дальнейшее чтение

Подробнее о том, что означает detached HEAD .

person msanford    schedule 30.10.2017
comment
Спасибо, за подробный ответ! Мне нужно кое-что прочитать, чтобы лучше понять, что я делаю, но я последую вашему совету и сделаю git rebase --abort. - person BioGeek; 30.10.2017
comment
@BioGeek С удовольствием. Я потратил пару минут, чтобы прочитать вашу вилку и убедиться, что ваши истории действительно расходятся This branch is 7 commits ahead, 17 commits behind biopython:master. A rebase обычно является подходящим решением. Возможно, просто прервите и повторите попытку с ускоренной перемоткой вперед (так git pull -r <upstream-name> master) с самого начала, устраните конфликты, продолжите и нажмите. Затем вы можете сравнить ветки с биопитоном и посмотреть, хорошо ли он выглядит. - person msanford; 30.10.2017
comment
@BioGeek Между прочим, я взял за привычку как на своей основной работе, так и в вкладах в ОС извлекать из основной ветки в основном каждый раз, когда я сажусь, чтобы начать работать, чтобы обеспечить управляемость потенциального количества конфликтов слияния. Не всегда необходимо на такой частоте, но удобно. - person msanford; 30.10.2017
comment
Мне удалось сделать запрос на включение! Это все еще не идеально (история коммитов git давала конфликты слияния), но мы делаем успехи. :-) - person BioGeek; 31.10.2017
comment
@BioGeek Рад это слышать! Мои первые несколько публичных PR были полным беспорядком, у вас все хорошо. Ветвление Git позволяет вам создавать тестовые ветки и безнаказанно делать все, что вы хотите, так что просто продолжайте экспериментировать. - person msanford; 31.10.2017