Git push local филиал к удаленному филиалу - PullRequest
0 голосов
/ 03 ноября 2018

У меня удаленный репозиторий с 2 ​​ветками, master и login . Я хочу отправить локальные изменения в ветку login , но она не работает.

$ git push origin/login

fatal: 'origin/login' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Там написано, что origin / login не похоже на git-репозиторий, но у меня есть. В чем моя проблема?

$ git log

commit f385d950a1f8c6412d91b26d749282d1a3ead27a (HEAD -> upstream, login, develop)
Author: SoojungChae <naan_ace@naver.com>
Date:   Sat Nov 3 06:49:16 2018 +0900

    Edit login logic

commit 6719685fbc7f895a909e2515753c02794591595e (origin/login)
Author: SoojungChae <naan_ace@naver.com>
Date:   Sat Sep 22 23:43:57 2018 +0900

    Block unnecessary things

...

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

git push принимает два дополнительных аргумента:

  • имя пульта , например origin
  • имя ветви , например master или login

То есть вы хотите:

git push origin login

Важно разделить эти две концепции: remote like origin - это короткое имя, которое вы и Git используете для отслеживания более длинного имени, например https://github.com/some/repo.git или ssh://git@github.com/some/repo.git, которое полностью отличается от имени филиала .

Что сбивает с толку, так это то, что помимо этих понятий и терминов - remote и branch - существует третья концепция, описываемая другой последовательностью слов, обычно записываемой как ветвь удаленного отслеживания . 1 Эта третья концепция включает строки вида origin/master и origin/login. Когда вы пишете origin login и когда вы должны писать origin/login.

, может возникнуть путаница.

Хитрость заключается в том, чтобы просмотреть документацию и внимательно следить за тем, что там написано: remote или branch . К сожалению, документация не использует ни один из этих терминов, потому что это на самом деле особые случаи даже более общего вида. Итак, документация (сейчас Git 2.19 2 ) гласит:

git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>] [--repo=<repository>] [-f | --force] [-d | --delete] [--prune] [-v | --verbose] [-u | --set-upstream] [-o <string> | --push-option=<string>] [-- [no-] signed | --signed= (true | false | if-asked)] [--force-with-lease [=<refname> [:<expect>]]] [--no-verify] [<repository> [<refspec>...]]

и два аргумента, о которых я здесь говорю, называются репозиторий и refspec , а не remote и branch . Как, как начинающему, пройти через все это, совсем не ясно.

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


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

2 Более старые версии git push имеют меньше необязательных аргументов.

0 голосов
/ 03 ноября 2018

Похоже, вы используете неверный синтаксис для нажатия. git push принимает в качестве первого аргумента URL-адрес, путь или удаленный элемент, а затем идут ветки. Поэтому вам нужно набрать git push origin login, если вы хотите перенести текущую ветку login в ветку login на origin.

...