我有带有2个分支的远程存储库,分别是 master 和登录。我想将本地更改推送到登录分支,但是它不起作用。
$ 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
...
答案 0 :(得分:1)
git push
需要另外两个 个参数:
origin
master
或login
也就是说,您想要
git push origin login
将这两个概念分开是很重要的:像origin
这样的 remote 是您和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>...
]]
和我在这里谈论的两个参数分别是 repository 和 refspec ,而不是 remote 和分支。作为一个初学者,如何解决所有这些问题还不清楚。
(这是一种长篇大论的说法,即Git文档不是很好。)
1 我现在更喜欢术语远程跟踪名称,因为尽管它具有分支名称方面的 some ,但它也具有有一些不同的地方。无论哪种方式,第三个概念都采用上面显示的形式。
2 较旧的git push
版本具有较少的可选参数。
答案 1 :(得分:0)
您似乎在使用错误的语法进行推送。 git push
将URL,路径或远程作为其第一个参数,然后在其后进行分支。因此,如果要将当前的git push origin login
分支推送到login
上的login
分支,则需要输入origin
。