[git]-本地创建仓库并推送GitHub服务器
从本地创建仓库并推送git服务器
上面的仓库创建方式是git用户建立仓库,其他用户通过git clone的方式来下载的。如果我们想把我们的已有项目创建为git仓库并推送到git服务器,那么请继续往下看。
先学习一下基本的知识
先 git clone一个你GitHub下面的项目
这里是学习的官网的演示代码,假设clone的仓库为 https://github.com/schacon/ticgit
git clone https://github.com/schacon/ticgit
查看远程仓库 git remote
git remote -v 指定-v
选项会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。
origin https://github.com/schacon/ticgit (fetch) origin https://github.com/schacon/ticgit (push)
更多用法参考Git 基础 - 远程仓库的使用
添加远程仓库 git remote add
git remote add 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写:
可以在命令行中使用字符串 pb 来代替整个 URL,常常也是这么干的
// 添加 远程库 并起一个方便使用的简写pb git remote add pb https://github.com/paulboone/ticgit // 添加完成可以使用 git remote -v 查看一下 git remote -v origin https://github.com/schacon/ticgit (fetch) origin https://github.com/schacon/ticgit (push) pb https://github.com/paulboone/ticgit (fetch) pb https://github.com/paulboone/ticgit (push)
从远程仓库中抓取与拉取 git fetch
如果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch <remote>
这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
git fetch origin
推送到远程仓库 git push
当你想要将 master 分支推送到 origin 服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字), 那么运行这个命令就可以将你所做的备份到服务器:
git push origin master
只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先抓取他们的工作并将其合并进你的工作后才能推送。
查看某个远程仓库 git remote show
$ git remote show origin * remote origin Fetch URL: https://github.com/schacon/ticgit Push URL: https://github.com/schacon/ticgit HEAD branch: master Remote branches: master tracked dev-branch tracked Local branch configured for ‘git pull‘: master merges with remote master Local ref configured for ‘git push‘: master pushes to master (up to date)
它同样会列出远程仓库的 URL 与跟踪分支的信息。 这些信息非常有用,它告诉你正处于 master 分支,并且如果运行 git pull, 就会抓取所有的远程引用,然后将远程 master 分支合并到本地 master 分支。 它也会列出拉取到的所有远程引用。
远程仓库的重命名与移除
git remote rename
// 想要将 pb 重命名为 paul git remote rename pb paul
值得注意的是这同样也会修改你所有远程跟踪的分支名字。 那些过去引用 pb/master 的现在会引用 paul/master。
如果因为一些原因想要移除一个远程仓库——你已经从服务器上搬走了或不再想使用某一个特定的镜像了, 又或者某一个贡献者不再贡献了——可以使用 git remote remove
或 git remote rm
git remote remove paul
本地创建项目仓库和github创建的仓库的两个强制在一起
ps: 先在你的GitHub上面创建一个仓库。
一下在你的机器上(也就是本地)执行
// 1. 约定你的git项目都在git目录下。 新建一个project目录 mkdir -p /home/tudou/git/project // 2. 进入到该目录中并创建项目所需的文件。留在这个目录并启动 git cd /home/tudou/git/project // 3. 初始化该目录为git仓库 git init // 4. 添加文件 . 代表所有 git add . // 5. 提交 -a 代表所有 git commit -m "message" -a // 如果只想提交某个文件 git commit -m "message" readme.md
注意 在本地创建仓库,是新建一个project文件夹在下面git init
. 这和在服务器端不同,需要注意。
以上都是在我们本机上工作,现在我们把这些更改推送到远程服务器上。
1.关联github上面的项目
在本地的仓库下运行命令:
语法:git remote add origin ssh:///repoxxx.git
ssh:// 这个是协议,可以省略。
// 注意,如果是github,而且使用的是ssh GitHub上面的地址如下 :tudouloveloli/learngit.git git remote add origin :tudouloveloli/sample.git
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库(参考前文提到的git remote add的语法)。
fatal: remote origin already exists错误的解决方案
// 1、先删除远程 Git 仓库 $ git remote rm origin // 2. 再添加远程 Git 仓库 $ git remote add origin :tudouloveloli/sample.git
2. 先拉取GitHub上面的到本地 git pull origin master
git原则,推送之前都要先拉取。
git pull 失败 ,提示:fatal: refusing to merge unrelated histories
其实这个问题是因为两个根本不相干的git库,一个是本地库,一个是远端库, 然后本地要去推送到远端,远端觉得这个本地库跟自己不相干,所以告知无法合并.
具体的方法:
方法1:从远端库拉下来代码,本地要加入的代码放到远端库下载到本地的库, 然后提交上去,因为这样的话,你基于的库就是远端的库,这是一次update了
方法2:
使用这个强制的方法git pull origin master --allow-unrelated-histories
后面加上
--allow-unrelated-histories
把两段不相干的分支进行强行合并
后面再push就可以了git push origin master
3. 推送本地内容到远程库
git push -u origin master
就可以把本地库的所有内容推送到远程库上:
如果远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
4. 推送成功后,可以立刻在GitHub看到变化
5. 从现在起,只要本地作了提交,就可以通过命令:git push origin master
如果是orign master 甚至可以简写为git push。
注意,时时刻刻还是那个原则,先拉取后推送。
最佳实践
- 在GitHub建立好仓库
- 在本地git clone
- 本地代码放到clone下来的仓库下面。
- 写代码 add--> commit --> pull --> push
如果你看完了全文,就能体会这样可以免去很多不必要的麻烦。