• 文章
  • 在线工具

git命令使用总结帮助文档

git命令 git使用 git文档
941
git的安装与配置
安装
linux:sudo yum install git
git安装完成后需要进行配置:
由于git是分布式版本控制系统;所以需要设置用户名与email:指定你的机器属于谁(如果使用工具这些就不必使用命令配置;诸如idea这些集成开发环境;可以直接在工具里面操作就可以了)
 
使用命令配置:
$ git config –global user.name “jenmi”
$ git config –global user.email “tanghaibinhaohan@163.com l”
 
使用上面的配置后在c:\Uers\用户    下面的.gitconfig文件下面出现以下内容:
       [user]
       name = tanghaibin
       email = tanghaibinhaohan@163.com
版本库
何为版本库
版本库英文名为repository,相当于一个文件夹;里面的每一个文件都会被git管理;文件的修改与删除git都会进行跟踪;以便任何时候都可以追踪历史或者还原
 
创建版本库
选择好目录再创建文件夹;例如:
这样就创建了一个空的文件夹在f盘
mkdir folderName
pwd:用于显示当前在哪一个目录下面
如果是windows系统;注意父目录与目录名不要使用中文;避免出现莫名其妙的错误
 
以上只是创建了一个空的目录与普通目录并没有什么区别;要想变成能被git管理的仓库;需要使用以下命令:
$ git init
这样就初始化了一个空的repository
在当前文件下面会出现一个隐藏的.git文件夹;这个目录是git来跟踪管理版本库的;不要随意修改;否则乱了后;git仓库也会被破坏掉
 
在repository下面创建一个文件:例如readme.txt;如果需要把其添加到仓库中;可以使用以下命令:git add readme.txt
 
提交文件到仓库:git commit –m “具体的描述(比如修改了什么)”
提交之前先add 再commit
也可以不add,可以使用参数的方式:git commit –a –m “description…”;这种方式git会自动把已经跟踪过的文件暂存起来然后提交
 
Git不能commit空的文件夹;至少里面需要有一个文件;提交文件夹其实是提交的里面的文件
 
Git取消跟踪某个文件:git rm –cached fileName
 
重命名文件: git mv oldName newName
 
 
查看修改
查看哪些文件被修改过;使用:git status;出现以下内容:
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
 
        modified:   init.txt
        modified:   readme.txt
 
no changes added to commit (use "git add" and/or "git commit -a")
 
上述内容表示修改了init.txt和readme.txt   两个文件;并且还没有提交
 
如果想查看具体修改了什么;使用:git diff
$ git diff
diff --git a/readme.txt b/readme.txt
index 3cbb000..f35227c 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
 <U+FEFF>唐海斌的学习之路
-git学习!!!
\ No newline at end of file
+git学习!!!aaaaaa
+bbb
\ No newline at end of file
 
git diff命令只能查看未放到暂存区的修改;如果修改已经放到了暂存区;那么可以带参数的方式查看修改:git diff –cached
 
查看最后一次提交
git log -1 HEAD
版本回退
查看最近到最远的日志:git log(当回退到某个版本之后,并且当前窗口已经关闭;使用此命令就只能查询最开始到回退到的那个版本之间的log)
回退到上一个版本:git reset --hard HEAD^
回退到指定的版本:git reset --hard commit_id   的前几个字母
查看文件的内容:cat 文件名
 
查看所有的日志记录:git reflog   (此命令就算回退之后;窗口关闭后也能查询出完整的操作记录)
 
HEAD指向的版本就是当前版本
 
 
 
工作区与暂存区
 工作区
被git掌管的文件的根目录文件夹
 
暂存区
在工作区下有一个隐藏的文件夹   .git   ;此文件夹不算工作区;是git的版本库
Git的版本库中存放了很多东西;最重要的就是 stage或者叫index的暂存区,还有git为我们创建的第一个分支 master,以及master的指针 HEAD
 
 
 
当我们使用  git add 文件名  其实是添加到暂存区中;当使用git commit –m “”命令后才会提交到分支master上面
 
撤销修改
撤销工作区的修改:  git checkout  fileName
 
撤销暂存区的修改: git reset HEAD fileName
 
如果已经提交到了版本库;则直接使用版本回退
 
 
删除文件
删除工作区的某个文件 :  rm  fileName
当删除后如果还未提交;则可以使用:  git checkout –  fileName 恢复;checkout就相当于把版本库中的版本替换掉工作区中的版本
 
远程仓库
查看远程仓库
git remote 列出当前被git管理的文件所有远程仓库的简写
 
git remote –v 列出当前被git管理的文件的所有远程仓库的简写与对应的url
 
添加远程仓库
git remote add 仓库地址简写  仓库地址
 
远程仓库的移除与重命名
重命名:git remote rename oldName newName
移除: git remote rm repositoryName
 
 
创建远程仓库例子
Git 与github之间的传送是通过ssh加密的;所以需要设置ssh
 
创建ssh  key 。在用户主目录下;看有没有.ssh目录;如果有;再看看下面有没有id_rsa 和id_rsa.pub这两个文件,这两个就是ssh密钥对,前者是私钥,后者是公钥;如果没有则创建ssh-keygen -t rsa -C "youremail@example.com"
 
登录github官网创建ssh  key ;其中title随便填;key文本框粘贴上公钥内容;点击add就可以了
 
 
创建远程仓库:
在github上面create respostory,根据提示使用本地的仓库初始化远程仓库:
添加后远程仓库的名字就是origin;这是git的默认叫法;也可以修改
把本地仓库的内容推送到远程仓库
  git push –u origin master
 
git push其实是把当前分支master推送到远程仓库分支master上面;加上-u的仓库;表示当前分支与远程仓库分支关联起来;以后的拉取与推送可以简化命令;
从现在起;只要本地修改了;就可以直直接推送到远程仓库分支master上
 
推送之前需要先提交到本地版本库中;在push到远程
 
克隆远程仓库:git clone 仓库地址
 
 
分支管理
 
当在分支上更改后如果没有提交commit ;直接切回到其他分支;则在所有分支上面都能看到所做的更改;只有当在分支上修改后并且提交后;其他的分支才看不到
 
解决冲突:
      当两个分支修改了同一个文件需要手动解决后add再commit
 
退出vim编辑
按下esc  ;然后输入”:q!”
 
Git标签
列出标签
git tag:此命令会以字母的顺序列出标签;
git标签的分类
  1. 轻量标签
轻量标签就如同一个不会改变的分支;只是一个提交的引用
 
  1. 附注标签
 
附注标签是一个存储在git数据库中的一个完整对象;其中包括 打标签者的名字、电子邮件、日期时间、标签信息;它们是可以被校验的;使用 GNU Privacy Guard (GPG)签名与验证。
 
创建标签
附注标签:git tag –a tagName –m “内容”
查看标签信息与对应的提交信息: git show tagName
 
轻量标签: git tag tagName
 
后期打标签
使用git log 命令找到之前提交的commitid
对之前提交的内容打标签:git tag –a tagName commitId
 
推送标签到远程
Push命令不会把标签也推送到远程仓库;必须手动推送:
git push respositoryName tagName:此命令会把tagName推送到远程仓库
git push respositroyName –tags : 此命令会把所有远程仓库中没有的标签都推送到远程仓库
 
检出标签
如果想要工作目录与仓库中特定的版本标签完全一致;使用:
git chekout –b newBranchName tagName:可以不指定newBranchName ;默认检出的新分支会以tagName为分支名称
 
 
别名
创建别名
git config -–global alias.aliasName 被替换掉的命令
例子:
git config –global alias.ci commit:此命令就将commit替换掉为ci
 
git分支
由于 Git 的分支实质上仅是包含所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件,所以它的创建和销毁都异常高效。 创建一个新分支就像是往一个文件中写入 41 个字节(40 个字符和 1 个换行符)
 
在git中;有一个指针HEAD指向当前分支;如图:HEAD指针就指向master分支。
每个分支都指向一个提交对象;如图;该master分支指向提交对象id为f30ab的对象,
当创建一个testing分支后;那么testing的分支就也指向id为f30ab的提交对象
 
创建分支前:
创建分支后:
创建分支
git branch branchName:创建分支
git checkout –b branchName:新建分支并且切换到该分支上
切换分支
git checkout branchName
 
合并分支
git merge branchName
删除分支
git branch –d branchName
 
修改分支后的状态
如果我们在testing分支上做了修改并提交;那么就是这种效果:
testing分支向前移动了一步;并且HEAD指针指向testing分支;而master分支还是在原来的位置。
 
当我们切回master分支: git checkout master 
并且做了修改并且提交;就变成如图这种效果:
现在就产生了两个提交;可以在适当的时候进行合并:git merge branchName
 
查看每一个分支的最后提交
git branch –v
 
查看尚未合并与已经合并的分支
尚未合并git branch --no–merged
已经合并git branch --merged
 
远程分支
推送分支
git默认不会推送本地分支到远程仓库;需要手动指定:
git push origin branchName
 
跟踪分支
跟踪分支:从远程跟踪分支检出到本地的分支叫做跟踪分支
当clone远程仓库到本地;默认会在本地创建一个跟踪origin/master 的master分支
如果需要修改跟踪的分支:
git checkout -–track origin/branchName:此命令会从远程仓库检出一个名为branchName的分支;检出到本地后本地分支的名字也为BranchName
 
git checkout –b localBranchName origin/branchName:此命令会从远程仓库检出一个名为branchName的分支;到本地会创建一个名为localBranchName 的分支
 
git branch –vv:列出所有的本地分支;并且包含一些信息;比如:每个分支跟踪的是哪一个远程分支与本地分支与远程分支是否领先
 
拉取数据
git fetch 命令从服务器抓取本地没有的数据;不会改变工作目录的内容;它只会获取数据然后让你自己合并
 
git pull 命令从服务器抓取数据并且合并到分支中;实际上是执行两条命令:
 
  git fetch
  git merge
 
删除远程分支
git push origin –delete branchName
 
 
变基
在git中整合不同的分支上的修改主要有两种方法:merge 和  rebase; rebase就是所谓的变基。
 
merge是把两个分支的提交与共同的祖先进行三方合并生成一个新的快照
 
变基整合 把一个分支上的历史提交逐个应用到 一个分支上面
比如现在有两个分支: dev  与  master
git checkout dev切换到 dev分支上
git rebase master  命令会把master 的提交历史逐个应用到dev分支上
 
变基的原则:
 
只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作
 
 
协议
git可以使用4种主要协议
本地协议
http协议
ssh协议
git协议
 
http协议
在git1.6.6 版本之前使用的 http协议 通常是只读模式;称为‘哑协议’;而在之后又推出了更加智能的http协议称为‘智能协议’
智能协议:此种协议与ssh和git协议有点类似,只是运行在标准的http/s 端口上;支持各种http各种验证机制;比ssh协议简单的多;比如可以使用用户名密码进行授权,免去了设置的ssh 公钥
 
ssh协议
ssh协议是一个验证授权的网络协议;
ssh协议所有传输的数据都要经过授权和加密
 
ssh不能进行匿名访问;即便钥读取数据也需要有通过ssh协议访问你主机的权限
 
 
git协议
这是包含在 Git 里的一个特殊的守护进程;它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。 要让版本库支持 Git 协议,需要先创建一个 git-daemon-export-ok 文件 —— 它是 Git 协议守护进程为这个版本库提供服务的必要条件 —— 但是除此之外没有任何安全措施。 要么谁都可以克隆这个版本库,要么谁也不能。 这意味这,通常不能通过 Git 协议推送。 由于没有授权机制,一旦你开放推送操作,意味着网络上知道这个项目 URL 的人都可以向项目推送数据。
 
git协议是git使用网络传输最快的协议
 
Git 协议也许也是最难架设的。 它要求有自己的守护进程,这就要配置 xinetd 或者其他的程序,这些工作并不简单。 它还要求防火墙开放 9418 端口,但是企业防火墙一般不会开放这个非标准端口。 而大型的企业防火墙通常会封锁这个端口。
 
 
 
 
 
 
 
 
 


评论
或者使用社交账号快捷登录