Git史上最全安装教程_git下载_git使用_git命令(二)

来源:程序思维浏览:1381次
Git是一个分布式的版本控制系统,它免费和开源。它的官方网址是https://git-scm.com/。访问这个网站,你可以下载git。同时,它有git的使用文档,程序思维今天结合官方给的文档和自己的使用经验,给大家详细介绍一下git。

Git基础

1.获取git仓库

有两种取得 Git 项目仓库的方法。 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。

在现有目录中初始化仓库,你只需要进入该项目目录并输入:
$ git init                                                  
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化 Git 仓库中所有的必须文件。但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。
如果你是在一个已经存在文件的文件夹(而不是空文件夹)中初始化 Git 仓库来进行版本控制的话,你应该开始跟踪这些文件并提交。 你可通过 git add 命令来实现对指定文件的跟踪,然后执行 git commit 提交:
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

克隆现有的仓库
如果你想获得一份已经存在了的 Git 仓库的拷贝,比如说,你想为某个开源项目贡献自己的一份力,这时就要用到 git clone 命令。细心的你会发现,我们用的不是checkout,而是命令clone, 这是 Git 区别于其它版本控制系统的一个重要特性,Git 克隆的是该 Git 仓库服务器上的几乎所有数据,而不是仅仅复制完成你工作所需要文件。 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。克隆仓库的命令格式是 git clone url。

2.忽略文件

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。
文件 .gitignore 的格式规范如下:
• 所有空行或者以 # 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式可以以(/)开头防止递归。
• 匹配模式可以以(/)结尾指定目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
忽略文件

3.撤消操作

$ git commit --amend
运行带有 --amend 选项的提交命令尝试重新提交。如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。

4.远程仓库的使用

git clone url 命令:如果你克隆过自己的仓库,即运行git clone 命令时,git 默认给你的仓库起名:origin。同时该命令会自动设置本地master分支跟踪克隆的远程仓库的master分支,所以当你再次运行 git remote命令总能看到这个仓库名字。
Git push remote-name branch-name 命令:只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。
Git fetch remote-name 与git pull区别:git fetch这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。Git pull这个命令是指如果你有一个分支设置为跟踪一个远程分支,可以使用 git pull命令来自动的抓取然后合并远程分支到当前分支。

5.打标签

Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。
附注标签是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。
 注意:如果没有为附注标签指定一条信息,Git 会运行编辑器要求你输入信息。所以我们通常用git tag -a v版本号 -m ‘标签信息’命令。
创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字。
比如:git tag v1.4
后期打标签:可以通过命令 git log –pretty=oneline列出过去所有的提交信息,其中第一项就是我们打标签需要的校验和,然后通过命令
git tag -a v版本号 提交的校验和,来对这个版本打上标签。

6.分支管理

解决分支之间的冲突:任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突解决标记(<<<<<<< , ======= , 和 >>>>>>>),这样你可以打开这些包含冲突的文件选择使用由 ======= 分割的两部分中的一个,或者你也可以自行合并这些内容,并且 将<<<<<<< , ======= , 和 >>>>>>> 这些标记完全删除,在你解决了所有文件里的冲突之后,对每个文件使用 git add 命令来将其标记为冲突已解决。
如果你想使用图形化工具来解决冲突,你可以运行 git mergetool,该命令会为你启动一个合适的可视化合并工具,并带领你一步一步解决这些冲突。等你退出合并工具之后,Git 会询问刚才的合并是否成功。 如果你回答是,Git 会暂存那些文件以表明冲突已解决: 你可以再次运行 git status 来确认所有的合并冲突都已被解决。
如果你确定之前有冲突的的文件都已经暂存了,这时你可以输入 git commit 来完成合并提交。

7.git协议及如何搭建git服务器

Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议。
本地协议:远程版本库就是硬盘内的另一个目录。
需要使用共享文件系统,比较难配置,速度也慢,这里不再多讲。

HTTP 协议:运行在标准的 HTTP/S 端口上并且可以使用各种 HTTP 验证机制,这意味着使用起来会比 SSH 协议简单的多,比如可以使用 HTTP 协议的用户名/密码的基础授权,免去设置 SSH 公钥。是目前最流行的使用 Git 的方式了,它即支持像 git:// 协议一样设置匿名服务,也可以像 SSH 协议一样提供传输时的授权和加密。 而且只用一个 URL 就可以都做到,省去了为不同的需求设置不同的 URL。

类似 GitHub 的服务,你在网页上看到的 URL (比如, https://github.com/schacon/simplegit[]),和你在克隆、推送(如果你有权限)时使用的是一样的。
SSH协议:架设 Git 服务器时常用 SSH 协议作为传输协议。 因为大多数环境下已经支持通过 SSH 访问 —— 即时没有也比较很容易架设。 SSH 协议也是一个验证授权的网络协议;并且,因为其普遍性,架设和使用都很容易。SSH 协议的缺点在于你不能通过他实现匿名访问。 即便只要读取数据,使用者也要有通过 SSH 访问你的主机的权限,这使得 SSH 协议不利于开源的项目。

Git 协议:这是包含在 Git 里的一个特殊的守护进程;它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。要让版本库支持 Git 协议,需要先创建一个 git-daemon-export-ok 文件 —— 它是 Git 协议守护进程为这个版本库提供服务的必要条件 —— 但是除此之外没有任何安全措施。 要么谁都可以克隆这个版本库,要么谁也不能。 这意味着,通常不能通过 Git 协议推送。 由于没有授权机制,一旦你开放推送操作,意味着网络上知道这个项目 URL 的人都可以向项目推送数据。 Git 协议是 Git 使用的网络传输协议里最快的。 如果你的项目有很大的访问量,或者你的项目很庞大并且不需要为写进行用户授权,架设 Git 守护进程来提供服务是不错的选择。 它使用与 SSH 相同的数据传输机制,但是省去了加密和授权的开销。Git 协议是 Git 使用的网络传输协议里最快的。 如果你的项目有很大的访问量,或者你的项目很庞大并且不需要为写进行用户授权,架设 Git 守护进程来提供服务是不错的选择。 它使用与 SSH 相同的数据传输机制,但是省去了加密和授权的开销。

关于如何搭建git服务器,请移步程序思维文章Linux搭建git服务器教程并自动同步到web根目录。目前已经有开源的git服务器,最出名的是GitLab。它有非常详细的文档说明,有兴趣的朋友可以自行学习。如果不想设立自己的 Git 服务器,你可以选择将你的 Git 项目托管到一个外部专业的托管网站。目前最大的 Git 托管平台是GitHub,相信很多人都听说过它。关于GitHub账户的创建、配置、维护,请移步到程序思维文章github教程_入门必会。

8.git与svn的双向桥接:git svn

这个工具允许你使用 Git 作为连接到 Subversion 有效的客户端,这样你可以使用 Git 所有本地的功能然后如同正在本地使用 Subversion 一样推送到 Subversion 服务器。在 Git 中所有 Subversion 桥接命令的基础命令是 git svn。 它可以跟很多命令。需要特别注意的是当你使用 git svn 时,就是在与 Subversion 打交道,一个与 Git 完全不同的系统。有感兴趣的,可以自行学习。

常用命令

列出所有 Git 配置:git config –list
初始化仓库:git init
克隆仓库  git clone url
将文件的修改、删除添加到暂存区:git add -u
将文件的修改,新建添加到暂存区:git add .
将文件的修改,删除,新建添加到暂存区:git add -A
提交某文件:git commit
提交某文件同时加上提交信息 git commit -m 提交信息
查看哪些文件处于什么状态(已跟踪、未跟踪、冲突): git status 
查看提交历史:git log(这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。)
查看简略的提交历史:git log –stat
查看最近2 次的提交历史:git log -2
查看指定时间之后的提交:git log --since=”2018-07-18”
查看指定时间之前的提交:git log --until=”2018-07-18”
查看远程仓库/服务器的简写:git remote
查看远程仓库/服务器的简写及其URL:git remote -v
查看远程仓库更多信息:git remote show remote-name
添加远程仓库(指定它的简写及url):git remote add shortname url
从远程仓库获得数据:git fetch remote-name
从远程仓库获得数据并合并到你的当前分支上:git pull
推送到远程仓库:git push remote-name branch-name
重命名远程仓库名:git remote rename 以前的名字 现在要修改成的名字
移除远程仓库:git remote rm remote-name
列出已有的标签:git tag
列出所有的版本是1.8.5的标签:git tag -l ‘v1.8.5*’
创建附注标签:git tag -a v版本号(git tag -a v1.4)
创建附注标签并添加标签信息:git tag -a v版本号 -m ‘标签信息’
查看标签信息及对应的提交信息:git show v版本号
给之前某个版本打标签:git tag -a v版本号 提交的检验和(或部分校验和)
检出标签:git checkout -b branchname tagname
创建分支:git branch branch-name
切换分支:git checkout branch-name
先创建分支再切换分支:git checkout -b branch-name
删除分支:git branch -d branch-name
强制删除分支:git branch -D branch-name
列出分支:git branch
查看分支提交信息:git branch -v
合并分支: git merge branch-name
撤消操作:git commit -amend
取消暂存的文件:git reset HEAD filename+“.”+文件扩展名
撤消对文件的修改,还原成上次提交的样子:git checkout - filename+“.”+文件扩展名
从暂存区删除文件:git rm –cached filename+“.”+文件扩展名
比较工作目录和暂存区的差别:git diff
比较暂存区和git仓库的差别:git diff --cached/git diff --staged
比较工作目录和git仓库的差别:git diff HEAD

总结

现在,你应该可以完成所有基本的 Git 本地操作-创建或者克隆一个仓库、做更改、暂存并提交这些更改、浏览你的仓库从创建到现在的所有更改的历史。
你应该能自如地创建并切换至新分支、在不同分支之间切换以及合并本地分支。
你可以运行你自己的git服务器或者放置你的资料于托管服务器内,能自如地使用 Git 为项目做出贡献、维护自己的项目。
恭喜你已经成为一个高效的git开发者。
精品好课
Vue2+Vue3+ES6+TS+Uni-app开发微信小程序从入门到实战视频教程
2021年最新Vue2+Vue3+ES6+TypeScript和uni-app开发微信小程序从入门到实战视频教程,本课程教你如何快速学会VUE和uni-app并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己...
VUE2+VUE3视频教程从入门到精通(全网最全的Vue课程)
VUE是目前最火的前端框架之一,就业薪资很高,本课程教您如何快速学会VUE+ES6并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习VUE高薪就...
jQuery视频教程从入门到精通
jquery视频教程从入门到精通,课程主要包含:jquery选择器、jquery事件、jquery文档操作、动画、Ajax、jquery插件的制作、jquery下拉无限加载插件的制作等等......
HTML5视频播放器video开发教程
适用人群1、有html基础2、有css基础3、有javascript基础课程概述手把手教你如何开发属于自己的HTML5视频播放器,利用mp4转成m3u8格式的视频,并在移动端和PC端进行播放支持m3u8直播格式,兼容...
最新完整React+VUE视频教程从入门到精,企业级实战项目
React和VUE是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React和VUE并应用到实战,教你如何解决内存泄漏,常用库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习Re...
HTML5基础入门视频教程易学必会
HTML5基础入门视频教程,教学思路清晰,简单易学必会。适合人群:创业者,只要会打字,对互联网编程感兴趣都可以学。课程概述:该课程主要讲解HTML(学习HTML5的必备基础语言)、CSS3、Javascript(学习...
React实战视频教程仿京东移动端电商
React是前端最火的框架之一,就业薪资很高,本课程教您如何快速学会React并应用到实战,对正在工作当中或打算学习React高薪就业的你来说,那么这门课程便是你手中的葵花宝典。
最新完整React视频教程从入门到精通纯干货纯实战
React是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习React高薪就...
收藏
扫一扫关注我们