1、一般使用ssh协议获取远程仓库,如果公钥失效的时候,要重建ssh,ssh重建和git没有关系;
在终端输入ssh-keygen -t rsa -C 建立ssh,然后一路回车,在主目录的.ssh下方id_rsa.pub是公钥,这个贴到远程服务器(管理仓库的网站)ssh key上面
在终端输入ssh -p 端口 ip/主机名 测试是否连接上远程服务器了。
2、更新code
repo是一个封装了git,从而用来简化操作git步骤的一个脚本;
repo sync -j8
-------------------------------我是华丽的分割线-----------------------------------
在了解git之前,看一个git的图解:http://www.open-open.com/lib/view/open1340874859749.html
3、提交一个文件到git仓库分两个步骤:
(1)git add filename;
(2)git commit -m "give the reason why you should commit";
commit 可以一次commit很多文件
4、git diff
比较两个版本的文件变动的地方
(1)git diff
就是比较工作区work和暂存区stage的不同; 或者比较工作区和仓库HEAD的版本
(2)git diff HEAD
就是比较暂存区和仓库HEAD文件
5、git status
时刻让你了解仓库当前的状态
特别是在提交之后使用的话,可以知道当前分支的版本内容超前了主分支的版本内容多少?
6、git log 和git reflog
查看提交的log
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 14:53:12 2013 +0800
git reflog可以查看不止本次提交的情况,罗列的是历史提交情况
而git log 则是查看本次登陆以来的提交情况
7、git reset --hard HEAD^
回退到上一个版本,上上个版本则是 HEAD^^, 还有一种写法则是HEAD~num
------------------------------------------我是懒惰的分割线--------------------------------------------------
git仓库在最初的时候会自动创建一个分支master,所以在commit的时候会commit到这一分支上
如果在commit之后,又没有对工作区进行修改时,这个时候使用git status就会显示是干净的状态
$ git status
# On branch master
nothing to commit (working directory clean)
7、在工作区修改了文件,比如加入了:FU**;
如何回退? git checkout -- filename
8、在工作区修改了文件,比如加入了:FU**;并且add 到暂存区
git reset HEAD -- filename
如何回退? git rest HEAD -- filename 或者 git rest HEAD
所以add到暂存区的文件要恢复的干干净净,那么就是: 先git reset HEAD 然后 git checkout --filename;
9、如果要回退一个版本的话,那么可以使用git reset HEAD^ + git checkout --filename ,或者直接 git reset --hard HEAD^ 强制一步到位;
----------------------------------我是混乱的分割线----------------------------------------
其实注意到,在git 中,如果--后面是filename的话,那么就基本是要空格,因为要用tab键补全嘛,如果--后面是关键字,一般是没有空格;
而文件名前面的(--) 一般是可以省略的;(没有全部试过)
10、git rm --filename
在git中,删除也是修改!!
git 管理的不是文件是修改!!
所以删除之后
(1)没有提交的话,那么想当于修改一个文件放在工作区,这个时候可以通过git reset HEAD 然后 git checkout -- filenam 恢复删除这个修改;或者git reset --hard HEAD
推荐利用前者,因为如果利用后者的话,会完全用当前仓库版本覆盖工作区的所有修改,这样一整天的功夫就白费了;还不如提交之后再覆盖;这样至少还能找回来
(2)提交的话,那么可以通过使用git checkout -- filename 这样的话就可以只是还原删除的这个file,版本是没有回退的;
----------------------------------我是饥饿的分割线---------------------------------------------
其实注意到在回退处理的命令;包含filename最好;这样的话就不会完全的回退;避免把有用的文件修改也覆盖了;
比如: git checkout -- filename;
添加远程仓库:
1、git remote add origin git@github.com:kawangjj/learngit.git
这是添加远程仓库的意思:
origin是给远程仓库起个别名
这是使用ssh协议来传输数据;
github.com是服务器的名字;
kgwangjj是 github用户名;
learngit是远程仓库名;
2、git push -u origin master
第一次推送文件到远程仓库;
之后要push的话把 -u 去掉的话
3、在远程仓库抓code
git clone git@github.com:kawangjj/learngit.git
如果报错:
ssh: connect to host github.com port 22: Connection timed out
请点击:点击打开链接
4、git branch bName创建分支 -〉git checkout bName切换分支; 也可以一步到位git checkout -b bName 创建分支bName并切换到该分支
5、git branch 查看分支,以及当前所在分支
---------------------------------------我是想打篮球的分支-------------------------------------
git管理的是修改在分支的理解上体现的很完整;每个分支“原本”的东西都有;所以在merge的时候简单的移动指针是速度飞快的原因;
1、git merge bName 合并bName分支到当前分支; git branch -d bName 删除分支
2、当两个分支同一个文件如果都修改的话,此时merge就发生一种较为普遍的冲突;这个时候需要修改该文件,在该文件中会列出冲突的原因;
修改过着之后,add commit,所以分支A指针+1了,然后查看B分支的该文件,该文件并没有修改;这个时候再merge就会发现B分支中该文件和A 分支最新版本的该文件一样;可知此时:分支B指针也+1了。
3、当在分支dev的时候,如果现在还没完成工作,但是也不能commit,但是此时需要创建一个临时分支解决一个BUG,那么可以先把当前的工作藏起来;然后完成修改BUG之后再回来重现该分支的工作;
git stash 把修改藏起来;
使用git status查到工作区clear的;
解决BUG之后回来使用
git stash list ;
git stash pop; 或者 git stash apply;
4、强行删除一个未merge的分支 :
git branch -D bName
5、查看远程信息库的信息
git remote -v
结果:origin
6、push 本地文件到远程仓库
git push origin master
7、创建远程分支到本地
git checkout -b dev origin/dev
push: git push origin dev
8、如果push的分支和同事push的分支发生冲突了,那么就要抓下最新的该分支;然后修改再push
抓下最新的分支: git pull
如果提示no tracking information的错误,就是没有创建本地dev 和远程dev的链接
git branch --set-upstream dev origin/dev
--------------------------我是混乱总结的结尾-------------------------------
学习廖雪峰git笔记录......