编程之路始于Git

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flyingcys/article/details/78947052

--作者:燕十三(flyingcys)

-- blog:http://blog.csdn.net/flyingcys

--QQ:294102238

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

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

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

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

同时git拥有GitHub for DesktopSource 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同时在项目目录下操作就是操作项目配置文件。

  1. 查看git配置信息:git config [--global] --list
  2. 编辑git配置文件:git config -e [--global]
  3. 修改git默认编辑器:git config [--global] core.editor vi
  4. 长期存储密码:git config [-- global] credential.helper store
  5. 查看所有账户git config --get-all user.name
  6. 设置用户名:git config [--global] user.name
  7. 设置邮箱:git config [--global] user.email

二、基本操作

1. git init

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

2. 查看信息

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

git status

  • 查看当前分支的版本历史

git log

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

git diff

3. git add

  • 添加指定文件到暂存区:

git add <file1> <file2> ...

  • 添加指定目录到暂存区:

git add <dir>

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

git add .

4. git rm

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

git rm <file1> <file2> ...

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

git rm --cached <file>

5. git commit

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

git commit -m “commit log”

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

git commit <file1> <file2> ... -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 <版本库地址>

    • 示例:ESP32SDK内有很多第三方开源组件作为子模块,如果不拉取全部,将导致有些功能无法正常编译。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用于拉取远程主机某个分支的更新,再与本地的指定分支合并。

l git push <远程主机名> <本地分支名><本地分支名>

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

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

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

示例:git pull origin

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

示例:git pull

9. git push

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

l git push <远程主机名> <本地分支名><远程分支名>

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

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

git push <远程主机名> --force

l 推送所有分支到远程仓库

git push <远程主机名> --all

10. git branch

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

l 列出所有本地分支

git branch

l 列出所有远程分支

git branch -r

l 列出所有本地和远程分支

git branch -a

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

git branch <branch name>

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

git checkout -b <brach name>

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

git check -b <local branch name> origin/<remote branch name>

l 切换到指定分支

git checkout <branch name>

l 删除分支

git branch -d <branch name>

l 强制删除分支

git branch -D <branch name>

l 删除远程分支

git push --delete origin <branch name>

l 合并指定分支到当前分支

git merge <branch name>

11. 文件恢复、重置

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

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

git checkout <file>

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

git checkout <commit id> <file>

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

git checkout .

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

git reset <commit id>

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

git reset --hard

1. git tag

列出所有tag

git tag

新建一个tag

git tag <tag name>

删除本地tag

git tag -d <tag name>

删除远程tag

git push origin :refs/tags/<tag name>

查看tag信息

git show <tag name>

提交指定tag

git push origin <tag name>

提交所有tag

git push origin --tags

一、实战流程:

1. 新建仓库

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

2) 添加文件至暂存区:

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

l 添加所有文件:git add .

3) 提交至本地仓库:

git commit -m “first commit”

4) 添加远程主机:

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

5) 提交至远程主机originmaster分支下: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


猜你喜欢

转载自blog.csdn.net/flyingcys/article/details/78947052
今日推荐