Да, хотя вы можете сделать вещи еще проще и начать с разветвления оригинала (при условии, что оригинал уже есть на GitHub). Это создаст ваше собственное репо на GitHub напрямую, и теперь вы можете клонировать его на свой компьютер и начать играть.
Нужно понять, просто, что репо на вашем компьютере разрешено общаться более чем с одним remote (репозитории на GitHub). Таким образом, нет никаких причин, по которым вы не должны делать pu sh коммиты в своем репо на GitHub, а затем переходить к оригиналу и просить получить что-нибудь новое, что он может предложить. Любому pu sh или fetch / pull разрешено указывать, с каким пультом он должен общаться. После разветвления оригинал обычно называется upstream
, в то время как ваш разветвление на GitHub обычно называется origin
, но это всего лишь условные обозначения.
Способ работает так, что в дополнение к ответвлению (-ям) Вы можете непосредственно видеть, что у вас есть «удаленные ветви», которые «отслеживают» (настроены для соответствия) ветви с тем же именем в GitHub в определенном удаленном хранилище. Так, например, если у вас есть ветвь master
, у вас также есть «удаленная ветвь» с именем origin/master
, соответствующая master
в репозитории на GitHub, с которого вы изначально клонировали.
Ну, у разных пультов есть разные ветки на вашей машине, поэтому ваша копия git никогда не запутается в том, откуда взялись вещи и с кем они должны общаться. Ничто не может случайно что-то сломать (особенно, если вы ограничитесь высказыванием fetch
и не говорите pull
).
Чтобы проиллюстрировать, я начну с клонирования моей собственной вилки чужого GitHub репо:
humlet:Downloads matt$ git clone https://github.com/mattneub/Animate-body.git
Cloning into 'Animate-body'...
remote: Enumerating objects: 35, done.
remote: Total 35 (delta 0), reused 0 (delta 0), pack-reused 35
Unpacking objects: 100% (35/35), done.
humlet:Downloads matt$ cd Animate-body/
Теперь я перейду к исходному репо, с которого было разветвлено мое репо, и превращу его в пульт для репо здесь, на моем компьютере (на самом деле все должно быть в одной строке) :
humlet:Animate-body matt$ git remote add upstream
https://github.com/imyrvold/Animate-body.git
Теперь я сделаю выборку из оригинала:
humlet:Animate-body matt$ git fetch --all
Fetching origin
Fetching upstream
From https://github.com/imyrvold/Animate-body
* [new branch] master -> upstream/master
Чтобы увидеть результат, я перечислю все мои ветви:
humlet:Animate-body matt$ git branch --list --all
* master
remotes/origin/HEAD -> origin/master
remotes/origin/fix
remotes/origin/master
remotes/upstream/master
Так что мое рабочее пространство master
не затронуто, но за кулисами у меня есть удаленная ветка origin/master
, которая отслеживает master
в моем репозитории GitHub, и другая удаленная ветка upstream/master
, которая отслеживает master
в оригинальное GitHub репо, от которого я разветвился. Я могу в любой момент получить или из них, а затем при желании влиться в мое рабочее пространство master
. Я также могу сделать pu sh с моего master
через origin/master
до master
на моем репозитории GitHub; но я не могу сделать это с upstream/master
, потому что у меня нет прав на запись в этом хранилище (именно поэтому я разветвлялся в первую очередь)!