[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 removegit 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。
注意,时时刻刻还是那个原则,先拉取后推送

最佳实践

  1. 在GitHub建立好仓库
  2. 在本地git clone
  3. 本地代码放到clone下来的仓库下面。
  4. 写代码 add--> commit --> pull --> push

如果你看完了全文,就能体会这样可以免去很多不必要的麻烦。

相关推荐