您的位置:首页 > 其它

git学习笔记

2017-06-07 11:06 197 查看
Git学习笔记:
git difffilename 结果解析:

---代表源文件 

+++代表目标文件

通常working area的文件都是被当作目标文件来看待。
-开头的行,是只出现在源文件中的行
+开头的行,是只出现在目标文件中的行
空格开头的行,是源文件和目标文件中都出现的行
差异按照差异小结进行组织,每个差异小结的第一行都是定位语句,由@@开头,@@结尾。
举例:

chenshu@chenshu-yangzhou-home:~/kaimei/data_service/src$git diff
0c5ee16a6a4c849d0ae0448caa8ff174399c7c3c
./socket_helper.cpp 

diff --git a/data_service/src/socket_helper.cpp b/data_service/src/socket_helper.cpp 

index d606452..047e213100755 

--- a/data_service/src/socket_helper.cpp 

+++ b/data_service/src/socket_helper.cpp 

@@ -4,6+4,7
@@ 
 #include"data/login_response.h" 

 #include"data/heartbeat_response.h" 

 #include"helper/parser.h" 

+#include"helper/time_measure.h" 

 #include<booster/log.h> 

 #include"exception/socket_error.h" 

 #include"exception/data_error.h" 

上面的diff结果表明
1.某个提交记录0c5ee代表的socket_helper.cpp文件是源文件,当前working
area的socket_helper文件是目标文件。
2.在源文件第4
eb51
行开始的6行和目标文件第4行开始的7行构成一个差异小结
3.这个差异小结中,目标文件添加了一行#include “helper/time_measure.h”
4.其他空格开头的行表明没有差异。
Git status用于查看仓库当前的状态。
Git log 查看日志信息,显示从最近到最远的提交的日志信息。
版本回退:git reset –hard HEAD^,回退到上一个版本。HEAD表示当前的版本,上一个版本就是HEAD^,上上一个版本就是
HEAD^^,
如果想回到自己制定的那个版本,可以先找到对应版本的
commit
id
,
然后
git reset –hard
+commit id就可以了。
工作区和暂存库:
工作区:就是你在电脑里能看到的目录,就是gitinit后的那个目录。
版本库:工作区有一个隐藏目录
.git
,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支
master
,以及指向
master
的一个指针叫
HEAD

把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000
 
工作区,暂存区的关系图解:

git add 后,

Git commit 后,

 
提交到远程库:

git remote add origin 远程库地址


添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
git push –u origin分支名(master,dev),把本地库的内容推送到远程,用
git
push
命令,由于远程库是空的,我们第一次推送分支时,加上了
-u
参数,Git不但会把本地的分支内容推送的远程新的分支,还会把本地的分支和远程的分支关联起来,在以后的推送或者拉取时就可以简化命令。省去-u参数。
查看git用户名和邮箱:gitconfig user.name ; git config user.email
修改git用户名和邮箱:
修改用户名: gitconfig --global user.name "用户名"
修改邮箱:git config--global user.emai “邮箱”
git config
命令的
--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置。
推送新的本地分支到远程:git push origin2新分支名
克隆远程库代码到本地:进入到本地库的目录,gitclone
远程库地址,就可以克隆岛本地对应的目录里。
删除本地仓库中的文件,并且push到远程:
本地仓库:A和B
服务器:C
今天在本地仓库A希望删除一个文件test,于是执行以下命令:
1
2
3
4
$ sudo rm test
$ git add .
$ git commit -m "delete test"
$ git push origin
在本地仓库检查,的确没有文件test了。然后再次从服务器拉下来看看,执行
1
$ git pull
test没有啦。我以为成功了。
但是在另一个客户端的本地仓库B拉下来,发现test又出来了。看来我以为的不是我以为的。
后来自己查资料,发现:

git add 表示 add to index only files created or modified and not those deleted

git add 只将新建的或者已更改的文件添加到索引区。(不会添加删除的文件)
但是我们现在是通过先rm的命令,那应该如何完成提交,并真正从服务端删除呢:
git add -u

git add -u  这个命令的意思是 add to index only files modified or deleted and not those created
只会处理已修改或者已删除的文件,但是不会处理新建的文件
好了,执行以下命令:
1
2
3
$ git add -u
$ git commit -m "delete test"
$ git push
这时候我们在本地git status发现,已经没有了那些提交信息。再去本地仓库B看看,

test也没有了!
总结:如果我们要彻底通过git删除,分两种方式,如果先执行rm
命令去删除就可以使用本文的方法。
如果想通过git,可以使用git rm命令。
删除分支:
(1)    删除本地分支:在master分支下,gitbranch –d
删除分支;
(2)    删除远程分支:gitpush
远程库名:分支名。
删除远程仓库:$ git remote rm
远程仓库名
远程仓库重命名:
在新版 Git
中可以用 gitremote rename 命令修改某个远程仓库在本地的简称,比如想把 pb 改成paul,可以这么运行:

$ git remote rename pb paul

 
查看远程仓库的信息:可以通过命令 git remote show[remote-name] 查看某个远程仓库的详细信息,比如要看所克隆的 origin 仓库,可以运行:

$ git remote show origin

从远程获取最新版本到本地:

使用如下命令可以在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支,git fetch origin master:temp

比较本地仓库与下载的temp分支

使用如下命令来比较本地代码与刚刚从远程下载下来的代码的区别:git diff temp

合并temp分支到本地的master分支

对比区别之后,如果觉得没有问题,可以使用如下命令进行代码合并:git merge temp

删除temp分支

如果temp分支不想要保留,可以使用如下命令删除该分支:
$ gitbranch -d temp

如果该分支的代码之前没有merge到本地,那么删除该分支会报错,可以使用Git branch-D temp强制删除该分支。这样,我们把远程仓库代码更新到本地了
 

Git fetch和git pull的区别

2013-03-04 10:58 58514人阅读 评论(4) 收藏 举报
Git中从远程的分支获取最新的版本到本地有这样2个命令:

1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge

    
Git fetch origin master
git log -p master..origin/master
git merge origin/master

    以上命令的含义:

   首先从远程的origin的master主分支下载最新的版本到origin/master分支上

   然后比较本地的master分支和origin/master分支的差别

   最后进行合并

   上述过程其实可以用以下更清晰的方式来进行:

gitfetch origin master:tmp

gitdiff tmp 

gitmerge tmp

    从远程获取最新的版本到本地的test分支上

   之后再进行比较合并

2. git pull:相当于是从远程获取最新版本并merge到本地

gitpull origin master

上述命令其实相当于git fetch
和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: