写在2018第一天:编程之路始于Git

git是目前世界上使用最广泛的分布式版本控制系统,由大名鼎鼎的Linus花了两周时间写成,同时在2008年使用给git作为唯一版本库格式托管平台gitHub网站上线,已有众多知名开源项目迁移至github。

git是分布式版本控制系统,与之对应的是集中式版本控制。分布式和集中式最大的不同,分布式并不是提取最新版本的文件快照,而是把代码仓库完整的克隆下来。每一次克隆操作都是对代码仓库的完整备份。所以,如果代码仓库的服务器发生故障,都可以用任何一个本地镜像仓库恢复,整个项目的历史记录都不会丢失。同时Git拥有完善的分支管理系统,可以指定与多个远程代码仓库交互协作开发。

git已经成为软件开发者必须会的技能之一,正确熟练的使用git对团队合作、提高工作效率都是有很大帮助的。很多公司包括硬件工程师都必须要熟练使用git,何况软件工程师呢!

基于git的托管平台除了github还有很多,国内免费也有很多,如码云中国(https://gitee.com);Coding(https://coding.net),国内的git平台下载速度都比较快,也支持一定数量的免费私有项目。

同时git拥有GitHub for Desktop、Source Tree等众多优秀且功能强大的图形化客户端工具。不过本篇主要讲解git命令行操作,因为只有在命令行模式下才能了解学习git的所有命令,这样操作GUI工具也不会存在困难。同时我推荐在熟练使用git后可通过命令行与GUI配合使用的方式提高工作效率。

git项目分为三个工作区域:工作目录、暂存区域、本地仓库及git仓库。其中:

Workspace:工作目录,存放从git仓库的压缩数据库中提取出来的文件,存放在本地磁盘上可修改。

Index:暂存区域,存放的是一个文件,保存了下次将要提交的文件列表信息。

Repository:本地仓库。

Remote:远程仓库,是Git用来保存项目的元数据和对象数据的地方。

git基本工作流程:

1.在工作目录中修改文件

2.暂时文件,将文件的快照放入暂存区域。

3.提交更新,找到暂时区域的文件,将快照永久性的存储到git仓库目录

一、Git安装与配置

1)安装:

Ubuntu系统默认没有安装Git,可通过sudo apt-get install git安装。

Windows下有很多支持Git的图形化工具,推荐安装SourceTree。

2)git配置:

git的配置文件为.gitconfig,它可以在用户主目录下,用于全局配置;也可以在项目的目录下,用于项目配置。所有操作如果添加了--global就是对全局配置文件操作;不加--global同时在项目目录下操作就是操作项目配置文件。

查看git配置信息:git config [--global] --list

编辑git配置文件:git config -e [--global]

修改git默认编辑器:git config [--global] core.editor vi

长期存储密码:git config [-- global] credential.helper store

查看所有账户git config --get-all user.name

设置用户名:git config [--global] user.name

设置邮箱:git config [--global] user.email

二、基本操作1.git init

初始化本地仓库,在当前目录下生成.git目录,该目录为仓库,而当前目录为工作空间。

2.查看信息

查看本地文件夹所有修改的文件

git status

查看当前分支的版本历史

git log

查看暂存区与工作区的差异

git diff

3.git add

添加指定文件到暂存区:

git add ...

添加指定目录到暂存区:

git add

添加当前目录下的所有文件:

git add .

4.git rm

删除工作区文件,且将这次删除放入暂存区

git rm ...

停止跟踪指定文件,但该文件会保留在工作区

git rm --cached

5.git commit

提交暂存区的文件到本地仓库

git commit -m“commit log”

提交暂存区的指定文件到本地仓库

git commit ... -m“commit log”

提交工作区自上次commit之后的变化至仓库区,无需git add

git commit -a

提交时显示所有修改信息

git commit -v

6.git clone

从远程主机克隆一个版本库,该命令会在本地主机生成一个目录,与远程主机的版本库同名。

git clone

示例:git clone https://github.com/espressif/ESP8266_RTOS_SDK

如需指定不同的目录名,可以将目录名作为git clone命令的第二个参数。

git clone

示例:git clone https://github.com/espressif/ESP8266_RTOS_SDK esp8266

在clone版本库的时候,使用的远程主机自动被命名为origin,如需使用其他主机名需使用-o选项。

git clone -o

示例:git clone -o esp https://github.com/espressif/ESP8266_RTOS_SDK

克隆指定分支:

git clone -b

示例:git clone -b 1.4.x https://github.com/espressif/ESP8266_RTOS_SDK

如果git仓库有子模块,可通过克隆命令一次拉取全部子模块。

git clone --recursive 。

示例:ESP32的SDK内有很多第三方开源组件作为子模块,如果不拉取全部,将导致有些功能无法正常编译。git clone --recursive https://github.com/espressif/esp-idf

7.git remote

git要求每个远程主机都必须指定一个主机名,git remote命令就用于管理主机名。

列出已经存在的所有远程主机:

git remote

查看远程主机的网址:

git remote -v

示例:当前有1台主机,主机名为origin

git remote -v

origin https://github.com/espressif/ESP8266_RTOS_SDK (fetch)

origin https://github.com/espressif/ESP8266_RTOS_SDK (push)

添加远程主机:

git remote add

示例:git remote add origin https://github.com/espressif/ESP8266_RTOS_SDK

删除远程主机:

git remote rm

示例:git remote rm origin

更改远程主机名:

git remote rename

示例:git remote rename origin esp

8.git pull

git pull用于拉取远程主机某个分支的更新,再与本地的指定分支合并。

git push :

示例:拉取origin主机的dev分支,与本地的master分支合并。git pull origin dev:master。如远程分支是与当前分支合并,则冒号后面的部分可以省略。

git会自动在本地分支与远程分支之间建立一种追踪关注。在git clone的时候,所有本地分支默认与远程主机的同名分支建立追踪关系,也就是本地的master分支自动追踪origin/master分支。

如当前分支与远程分支存在追踪关系,可省略远程分支名

示例:git pull origin

如当前分支只有一个追踪分支,可省略远程主机名

示例:git pull

9.git push

git push用于将本地分支更新,推送至远程主机,操作与git pull类同。

git push :

如果当前分支与多个主机存在追踪关系,可以使用-u选项指定一个默认主机,这样后面就不需要加任何参数直接使用git push。git push -u origin master。将本地的master分支推送到origin主机,同事指定origin为默认主机。

强制推送当前分支到远程仓库,即使有冲突;该指令要慎用。

git push --force

推送所有分支到远程仓库

git push --all

10.git branch

分支管理在git里是很有用的的一个功能。

列出所有本地分支

git branch

列出所有远程分支

git branch -r

列出所有本地和远程分支

git branch -a

新建分支,但不切换至新建的分支

git branch

新建分支,同时切换至新建的分支

git checkout -b

拉取远程分支并创建本地分支

git check -b origin/

切换到指定分支

git checkout

删除分支

git branch -d

强制删除分支

git branch -D

删除远程分支

git push --delete origin

合并指定分支到当前分支

git merge

11.文件恢复、重置

分别使用git checkout、git reset指令,使用这些操作后,很多修改的文件将被取消,需慎用。

恢复暂存区的指定文件到工作区

git checkout

恢复指定commit的指定文件到工作区

git checkout

恢复暂存区的所有文件到工作区

git checkout .

重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

git reset

重置暂存区与工作区,与上一次commit保持一致

git reset --hard

12.git tag

列出所有tag

git tag

新建一个tag

git tag

删除本地tag

git tag -d

删除远程tag

git push origin :refs/tags/

查看tag信息

git show

提交指定tag

git push origin

提交所有tag

git push origin --tags

三、实战流程:1.新建仓库

1)初始化本地仓库:git init

2)添加文件至暂存区:

添加指定文件:git add README.md

添加所有文件:git add .

3)提交至本地仓库:

git commit -m“first commit”

4)添加远程主机:

git remote add origin https://github.com/espressif/ESP8266_RTOS_SDK

5)提交至远程主机origin的master分支下:git push -u origin master,并建立跟踪关系。以后提交更新可以直接使用git push。

2.已存在仓库

1)克隆:git clone https://github.com/espressif/ESP8266_RTOS_SDK

2)查看本地文件更新状态:git status

3)查看更新日志:git log

4)拉取更新:git pull

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180101G0KTNN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励