首先要明确一点,对git的操作是围绕3个大的步骤来展开的(其实几乎所有的SCM都是这样)
1. 从git取数据(git clone)这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)
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,这样子最简单的初始创建就结束了,不展开,只是做个例子用。
极大多数情况是由于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即可。
再尝试输出就应该有了
```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”的形式为”+
比如 上面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 标准输入并打印文件
参考链接