您的位置:首页 > 其它

git学习日记

2014-09-24 18:38 148 查看
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 则是查看本次登陆以来的提交情况

在commit后面可以看到一串哈西number,通过get reset --hard number就可以在时光机穿越过去也可回到现实

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笔记录......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: