git入门

git下载与安装

  • 下载:官网链接,下载操作系统对应的版本
  • 安装:按默认配置next
  • 验证安装:文件夹内右键空白处,选择Git Bash,git --version 查看git版本

git概述

Git是分布式版本控制系统(Distributed Version Control System, 简称DVCS)

  • 本地仓库:开发人员自己电脑上的Git仓库
  • 远程仓库:是在远程服务器上的Git仓库
  • Clone:克隆,将远程仓库复制到本地
  • Push:推送,将本地仓库代码上传到远程仓库
  • Pull:拉取,将远程仓库代码下载到本地仓库

git工作流程

  1. 从远程仓库克隆代码到本地仓库
  2. 从本地仓库中checkout代码,进行代码修改
  3. 在提交前将代码提交到暂存区
  4. 提交到本地仓库,本地仓库中保存了修改的各个历史版本
  5. 将代码pull到远程仓库

git常用命令

环境配置

当安装Git后首先要设置用户信息,因为每次Git提交都会使用该用户信息
用户信息保存在 C:\Users\$USER\.gitconfig 文件中

  • 设置用户信息
    • 名称:git config --global user.name "hangkai"
    • 邮箱:git config --global user.email "897936401@qq.com"
  • 查看配置信息:git config --list
  • 查看用户名:git config user.name

获取git仓库

要使用Git对代码进行版本控制,首先要获得Git仓库

获取Git仓库的两种方式

  • 在本地初始化一个Git仓库
  • 从远程仓库克隆

工作目录、暂存区、版本库的概念

  • 版本库:.git文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件等
  • 工作目录(工作区):包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
  • 暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

Git工作目录下文件的两种状态

  • untracked未跟踪(未被纳入版本控制)
  • tracked已跟踪(被纳入版本控制)
    • Unmodified未修改状态
    • Modified已修改状态
    • Stage已暂存状态

本地仓库操作

git status:查看文件状态
git status -s:输出更加简洁
git add 文件名:将未跟踪的文件加入到暂存区
git reset HEAD 文件名:取消暂存,将已跟踪文件变为未跟踪
git commit -m "日志信息":将暂存区的文件加入到本地仓库
git commit -a -m "日志信息":加-a等于add+commit,可以不用先add
git commit:将日志信息写在编辑器内,i键切换插入模式,esc退出插入模式,:wq保存并退出
git rm 文件名:删除工作区和暂存区中的文件,未删除本地仓库。若直接界面删除工作区文件,则需先add到暂存区,再commit到本地仓库
git log:查看日志记录,enter查看未显示的日志信息,q退出日志界面

将文件添加至忽略列表,有些文件无需纳入Git管理,也不希望他们出现在未跟踪列表。比如日志文件,或者编译过程中创建的临时文件等。在这种情况下我们可以创建一个.gitignore的文件(文件名固定),列出要忽略的文件模式。
通过linux命令创建:touch .gitignore

# 这是注释 //#键注释
*.a   //忽略所有.a结尾的文件
!lib.a  //lib.a文件需要Git管理
/TODO    //忽略当前目录下面名为TODO的文件
build/   //忽略build目录下面所有的文件
doc/*.txt   //忽略doc目录下面所有的txt文件
doc/**/*.pdf   //忽略doc目录下以及子目录下所有pdf结尾的文件

远程仓库操作

查看远程仓库

git remote:查看远程仓库(clone的本地仓库默认配置远程仓库origon;init的本地仓库默认没有对应的远程仓库)
git remote -v:查看远程仓库的名称和(抓取和推送)地址
git remote show 远程服务器名:查看指定远程仓库更详细的信息

添加远程仓库

git remote add <shortname> <url>(即添加当前本地仓库和远程仓库的关联关系)

从远程仓库克隆

Git克隆是该Git服务器上几乎所有数据(包括日志信息、历史记录等),不仅仅是复制工作所需要的文件。当你执行git clone命令的时候,默认配置下远程仓库中的每个文件的每个版本都将被拉取下来

git clone <url>

移除无效的远程仓库

git remote rm 远程仓库名:此命令只是从本地移除远程仓库,并不会真正影响到远程仓库(即删除本地和远程的关联关系)

从远程仓库拉取和抓取

git fetch 远程仓库名 分支名:从远程仓库获取最新版本到本地仓库,不会自动merge,即本地仓库有工作区无(远程仓库名和分支名可以省略,默认origon master)
git merge 远程仓库名/分支名:从本地仓库提取到工作区
git pull 远程仓库名 分支名:从远程仓库获取最新版本到本地仓库并merge到本地仓库,相当于fetch+merge
注意:当本地仓库不是远程仓库的克隆,而是本地创建的仓库并且仓库中存在文件,这时从远程仓库pull数据会报错(fatal:refusing to merge unrelated histories),解决此问题可以在git pull命令后加入参数--allow-unrelated-histories

推送到远程仓库

git push 远程仓库名 分支名

Git分支

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开,以免影响开发主线。Git的master分支并不是一个特殊分支,它和其他分支没有区别。之所以几乎每个仓库都有master分支,是因为git init命令默认创建它。

  • 查看分支
    • git branch:列出所有本地分支
    • git branch -r:列出所有远程分支
    • git branch -a:列出所有本地分支和远程分支
  • 创建分支
    • git branch 分支名:创建本地分支,以当前分支为基础创建的分支
  • 切换分支
    • git checkout 分支名:切换本地分支
  • 推送至远程仓库分支
    • git push 远程仓库名 分支名
  • 合并分支
    注意:如果在两个分支中,对同一个文件同一个部分进行了不同的修改,Git会提示文件冲突。需要自己修改冲突文件,执行git add来标识冲突已解决,进入日志编辑器,输入:wq退出
    • git merge 远程分支名:(在master分支下合并b1分支的内容:git merge b1
  • 删除分支
    注意:删除分支时需要切换到别的分支再删除
    • git branch -d 分支名:删除本地分支
    • git branch -D 分支名:如果要删除的分支有修改,并且没有合并到其他分支上或者推送到远程分支,需要把d改为D才能强行删除
    • git push 远程仓库名 -d 分支名:删除远程分支

Git标签

像其他版本控制系统(VCS)一样,Git可以给历史中的某一次提交打上标签。标签是指某个分支某个时间点的状态,通过分支可以快速切换到标记时的状态

  • git tag 标签名:创建一个标签
  • git tag:列出已有标签
  • git show 标签名:查看某一个标签信息
  • git push 远程仓库名 标签名:将标签推送至远程仓库
  • git checkout -b 分支名 标签名:新建一个分支指向某个标签
  • git tag -d 本地标签名:删除本地标签
  • git push 远程仓库名 :refs/tags/远程标签名:删除远程标签
上一篇:【xLua热更新】 将xLua导入Unity工程


下一篇:git 常见命令和资源