Github добавляет репозиторий в качестве форка из существующего клона

21

Итак, у меня есть git-репозиторий, который я клонировал из вышестоящего источника на ghithub. Я внес в него несколько изменений (которые не зафиксированы и в основной ветке). То, что я хочу сделать, это поместить мои изменения на мою страницу github как новую ветку и заставить github по-прежнему рассматривать ее как ветвь.

Это возможно? Я довольно новичок в Git и GitHub. Мой вопрос вообще имел смысл?

Самый простой способ, который я могу придумать (который, я уверен, является самым окольным путем), - это раскрутить репо на github. Клонируйте его локально в другой каталог. Добавьте исходное репо. Создайте ветку в этом новом разветвленном репо. Скопируйте мои изменения кода вручную в новый локальный репозиторий. А затем отодвинь его обратно в мой github.

Является ли это распространенным случаем использования более простого способа без дублирования каталогов?

Я думаю, что я спрашиваю здесь, в отличие от SO, так как я использую командную строку git для Linux, и люди здесь дают лучшие ответы imo =]

Falmarri
источник
Я полагаю, что это технически по теме, но в других местах это может быть лучше, так как в основном это вопрос github
Майкл Мрозек

Ответы:

22

Вы можете сделать все это из своего существующего репозитория (не нужно клонировать ветвь в новый (локальный) репозиторий, создать ветку, скопировать ваши коммиты / изменения и т. Д.).

  1. Подготовьте ваши коммиты к публикации.

    Уточните любые существующие локальные коммиты (например, с помощью git commit --amendи / или git rebase --interactive).

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

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

    git branch -m master my-feature
    
  2. Поместите вышестоящий репозиторий GitHub
    (например) github.com:UpstreamOwner/repostory_name.gitкак
    (например) github.com:YourUser/repository_name.git.

    Это делается на веб-сайте GitHub (или «клиенте», который использует API-интерфейсы GitHub), здесь не задействованы локальные команды Git.

  3. В вашем локальном репозитории (тот, который изначально был клонирован из вышестоящего GitHub-репозитория и содержит ваши изменения в его главном ), добавьте ваш репозиторий fork как удаленный:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. Вставьте свою ветку в ваш репозиторий на GitHub.

    git push github my-feature
    
  5. При желании переименуйте пульты, чтобы ваш форк был известен как «origin», а восходящий - «upstream».

    git remote rename origin upstream
    git remote rename github origin
    

    Одной из причин переименования удаленных устройств может быть то, что вы хотите иметь возможность использовать git pushбез указания хранилища (по умолчанию это «origin»).

Крис Джонсен
источник
Работал безупречно, но когда вы создаете пульт Github, я думаю, что вы пропускаете «https: //» в URL Github
jesjimher
1
@jesjimher: «URL» в этом посте используют «scp-подобный синтаксис», который использует SSH, а не HTTP (S). Вам также необходимо изменить двоеточие на косую черту, чтобы использовать их в качестве URL-адресов HTTP (S) (при условии, что сервер поддерживает оба без дополнительных изменений пространства имен, что делает GitHub).
Крис Джонсен
Ой, вы правы, Крис, я ошибочно набрал двоеточие как косую черту, и поэтому мне это не сработало, если я не добавил «https». Извините за шум ...
jesjimher
На шаге 4 использование -uопции может заставить вашу локальную ветку my-feature отслеживать ту же удаленную ветку origin/my-feature. Команда:git push -u github my-feature
YaOzI
Замечательно. Единственное, что мне пришлось изменить, - это адрес github!
Тико
0

Есть инструмент: hub

hubэто инструмент командной строки, добавляющий gitв него дополнительные функции и команды, облегчающие работу с GitHub

Теперь вы можете:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
Евгений Верещагин
источник