Подтвердить что ты не робот

Git перезагрузка вверх

Итак, я разветкил проект и сделал несколько изменений и перебросил их в начало/мастер. Эти изменения я не собирался отправлять назад. Все находит и до сих пор у меня есть некоторые изменения, которые я хочу нажать вверх по течению.

Можно ли переустанавливать назад вверх по течению в другой ветке и фиксировать эту ветвь? Могу ли я совершить эти изменения из своего ветки? Я ужасно исказил свое репо?

4b9b3361

Ответ 1

Нет, нет. Просто ветвь от восходящего/ведущего, сделайте свои коммиты там, а затем вы можете нажать (или вытащить-запросить) те коммиты, которые аккуратно подходят к восходящему/ведущему.

Если у вас есть A --- B --- C, где upstream/master находится на A, а master - на C, значит, B и C являются коммитами, которые вы не хотите отправлять вверх по течению, а затем:

git checkout -b to-send-upstream A
# work, work, work
# commits
git log A..HEAD # this will be the commits to send upstream

Если вы совершили ошибку, вы не собираетесь отправлять обратно на мастера, может быть проще отслеживать все, если вы переместите их в другую ветку и держите своего хозяина в синхронизации с восходящим/ведущим:

git branch my-stuff-not-sent-upstream
git reset --hard A # will wipe out local changes!
git push origin master -f # can lose history if a shared remote!
git push origin my-stuff-not-sent-upstream

будет эффективно заменять "master" на "my-stuff-not-sent-upstream" и переводить мастер и origin/master обратно в ту же фиксацию, что и upstream/master.

Ответ 2

Предполагая, что коммиты A, B, C являются вашими частными изменениями и совершают 1,2,3 - это то, что вы хотите оттолкнуть, ваша история будет выглядеть так:

                   (origin/master)
                  /
.... o - A - B - C - 1 - 2 - 3  (master)
      \
       (upstream/master)

Теперь вы хотите переместить 1,2,3 в новую ветку из восходящего потока:

git checkout master
git checkout -b upstream
git rebase origin/master --onto upstream/master

Что это значит, это перейти на новую ветвь с именем upstream, где находится текущий master. Затем он переустанавливает фиксацию 1,2,3 после фиксации, на которую ссылается upstream/master.

После операции у вас будет:

         1' - 2' - 3' (upstream)
        /
       /           (origin/master)
      /           /
.... o - A - B - C - 1 - 2 - 3  (master)
      \
       (upstream/master)

Теперь вы будете готовы направить восходящую ветвь на верхний пульт.

Ответ 3

Во-первых, вам нужно добавить вверх по течению в качестве удаленного.

git remote add upstream https://github.com/upstream/repo.git

Имея в виду, что у вас есть не только "источник" (который ссылается на ваш собственный клон на стороне GitHub), но также "вверх по течению" (который является исходным репо, которое вы разветвляли на стороне GitHub).

Затем вам нужно найти вверх по течению и проверить оттуда:

git checkout -b upstream/master

Вы можете сделать свои коммиты там, а затем вернуться к исходному состоянию, что позволит вам получить оттуда чистый запрос.