Git中origin和master的介绍以及建立Github仓库链接简单介绍

前言

首先要明确一点,对git的操作是围绕3个大的步骤来展开的(其实几乎所有的SCM都是这样)

1.     从git取数据(git clone)
2.     改动代码
3.     将改动传回git(git push)

这3个步骤又涉及到两个repository,一个是remote repository,再远程服务器上,一个是local repository,再自己工作区上。其中1, 3两个步骤涉及到remote server/remote repository/remote branch,

2涉及到local repository/local branch。git clone 会根据你指定的remote server/repository/branch,拷贝一个副本到你本地,再git push之前,你对所有文件的改动都是在你自己本地的local repository来做的,你的改动(local branch)和remote branch是独立(并行)的。Git显示的就是local repository。

在clone完成之后,Git 会自动为你将此远程仓库命名为origin(origin只相当于一个别名,运行git remote –v或者查看.git/config可以看到origin的含义),并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名) 这样的形式表示远程分支,所以origin/master指向的是一个remote branch(从那个branch我们clone数据到本地),但你无法在本地更改其数据。

同时,Git 会建立一个属于你自己的本地master 分支,它指向的是你刚刚从remote server传到你本地的副本。随着你不断的改动文件,git add, git commit,master的指向会自动移动,你也可以通过merge(fast forward)来移动master的指向。

$git branch -a (to show all the branches git knows about)

$git branch -r (to show remote branches git knows about)


Github仓库建立连接步骤

1.现在github上新建一个仓库,只需要new repository,先按默认的来,什么README,Ignore等文件可以先不建立,直接先按默认的写好名字即可


2.打开终端,cd到指定目录

git init

3.添加文件到本地仓库

git add .

这里的可以一个个添加,也可以add后面加个.直接全部添加到本地仓库

4.提交(后面写好备注)

git commit -m "First commit"  

5.打开github仓库页面,在clone和download里面找到,我这里点击的是ssh,copy出来

git remote add origin {远程仓库地址}  

6.push到远程仓库

git push -u origin master  

OK,这样子最简单的初始创建就结束了,不展开,只是做个例子用。


Q1:github提示Permission denied (publickey)

点击打开链接

极大多数情况是由于github账号没有设置ssh公钥信息所致。 前往 GitHub 网站的"account settings"

依次点击"Setting -> SSH Keys"->"New SSH key"

Title处填写“id_rsa.pub”或其他任意信息。 key处原样拷贝下面命令的打印 `~/.ssh/id_rsa.pub` 文件的内容:

```
cat ~/.ssh/id_rsa.pub
```

这句生成的一整坨命令直接复制到github里面的ssh设置里面

如没有则按下述方法生成:

ssh-keygen -t rsa

一路回车......

最后,输入“ssh -T [email protected]”确认OK即可。

再尝试输出就应该有了

```
cat ~/.ssh/id_rsa.pub
```

Q2: 里面的Origin和Master到底是什么意思?

mintoudeMacBook-Pro:NewWeexDemo mintou$ git branch -a
* master
  remotes/origin/master
mintoudeMacBook-Pro:NewWeexDemo mintou$ git branch -r
  origin/master
mintoudeMacBook-Pro:NewWeexDemo mintou$ 

根据上面创建的git目录,我们在这里进行查看

可以发现,master就是local branch,origin/master是remote branch

master is a branch in the local repository. remotes/origin/master is a branch named master on the remote named origin

$git diff origin/master master (show me the changes between the remote master branch and my master branch).


$git diff origin/master remotes/origin/master

-a查看所有本地和远程仓库,其中remotes标识的只是代表远程仓库,remotes/origin/master和origin/master的指向是相同的

-r仅仅查看远程仓库,因此就不会有remotes前缀


git push origin master

origin指定了你要推向哪个远程仓库。

master其实是一个“refspec”,正常的“refspec”的形式为”+:”,冒号前表示local branch的名字,冒号后表示remote repository下 branch的名字。注意,如果你省略了,git就认为你想push到remote repository下和local branch相同名字的branch。听起来有点拗口,再解释下,push是怎么个push法,就是把本地branch指向的commit push到remote repository下的branch

比如 上面push的全称就是

git push origin master:master

在local repository中找到名字为master的branch,使用它去更新remote repository下名字为master的branch,如果remote repository下不存在名字是master的branch,那么新建一个


因为本地仓库名字和远程仓库名字相同,就可以直接省略的远程名字

git push origin master:refs/for/mybranch
在local repository中找到名字为master的branch,用他去更新remote repository下面名字为mybranch的branch


git push origin HEAD:refs/for/mybranch

HEAD指向当前工作的branch,master不一定指向当前工作的branch,其实如果你无论在哪个分支,直接把当前分支push上去

git push origin :mybranch

再origin repository里面查找mybranch,删除它。用一个空的去更新它,就相当于删除了


补充一些指令:

find . -name ".git" | xargs rm -Rf       移除所有.git,可以重新关联

git status 查看当前工作目录修改状态
在git commit之前,所有的内容都会先进入暂缓区
git diff #是工作区(work dict)和暂存区(stage)的比较
git diff --cached    #是暂存区(stage)和分支(master)的比较
git add 文件名  添加到工作区  git add .所有的都添加到工作区
git commit -m 提交
git log 查看提交log  --pretty=oneline 一行显示  SHA1来标记
git reset 回到之前的commit版本 git reset --hard HEAD^  HEAD~~ 上上个  HEAD~100
commit 1  commit 2 commit 3
可以任意reset穿梭 记得id就好
如果忘记了可以用git reflog 查看所有的提交记录
cat 标准输入并打印文件


参考链接


你可能感兴趣的:(git指令,github相关)