文章目录
一、基本概念
1. 工作区、暂存区、版本库、远程仓库
- Workspace:工作区,就是你平时存放项目代码的地方
- Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到本地库的信息
- Repository:本地库(或版本库),就是安全存放数据的位置,这里面有你提交的所有版本的数据。其中HEAD指向最新放入仓库的版本
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
局域网环境下:GitLab 服务器
外网环境下:GitHub、码云
2. 文件的四种状态
- Untracked:未跟踪,此文件在文件夹中,但并没有加入到本地库,不参与版本控制。通过git add可将状态变为Staged.
- Unmodify:文件已经加入到本地库,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处:如果它被修改,而变为Modified;如果使用git rm移出版本库,则成为Untracked文件
- Modified:文件已修改,仅仅是修改,并没有进行其他的操作。这个文件也有两个去处:通过git add可进入暂存staged状态;使用git checkout 丢弃修改,返回到unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改
- Staged:暂存状态,再执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态。执行git reset HEAD filename取消暂存,文件状态为Modified
3. 分支
- 在版本控制过程中,可以使用多条线同时推进多个任务
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
二、Git 命令行操作
1、新建代码库
#本地库初始化(在当前目录新建一个Git代码库)
git init
#新建一个目录,将其初始化为Git代码库
git init [project-name]
2、设置签名
作用:区分不同开发人员的身份
辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系
#1.项目级别/仓库级别:仅在当前本地库范围内有效,信息保存位置:./.git/config 文件
git config user.name nic
git config user.email nicahead@gmail.com
#2.系统用户级别:登录当前操作系统的用户范围,信息保存位置:~/.gitconfig 文件
git config --global user.name nic
git config --global nicahead@gmail.com
级别优先级
- 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
- 如果只有系统用户级别的签名,就以系统用户级别的签名为准
- 二者都没有不允许
- 一般情况下我们设置一次系统用户签名并在平时使用即可
3、查看文件状态
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
4、工作区<–>暂存区
#添加指定文件到暂存区
git add [file1] [file2] ...
#添加指定目录到暂存区,包括子目录
git add [dir]
#添加当前目录的所有文件到暂存区
git add .
#当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了
git rm file_path
#当我们需要删除暂存区或分支上的文件, 但本地又需要使用
git rm --cached file_path
5、工作区<–>本地库(版本库)
#将暂存区-->本地库(版本库)
git commit -m '该次提交说明'
#移除不必要的添加到暂存区的文件
git reset HEAD 文件名
#去掉上一次的提交(会直接变成add之前状态)
git reset HEAD^
#去掉上一次的提交(变成add之后,commit之前状态)
git reset --soft HEAD^
6、历史记录
#查看历史记录
#显示详细信息
git log
#显示一行信息
git log --pretty=oneline
#显示一行信息,局部索引值
git log --oneline
#显示一行信息,有指针信息
git reflog
#前进后退版本
#基于索引值操作[推荐]
git reset --hard [局部索引值]
#使用^符号:只能后退,一个^表示后退一步,n 个表示后退 n 步
git reset --hard HEAD^
#使用~符号:只能后退,表示后退 n 步
git reset --hard HEAD~n
7、分支操作
#创建分支
git branch [分支名]
#查看分支
git branch -v
#切换分支
git checkout [分支名]
#合并分支
#第一步:切换到接受修改的分支(被合并,增加新内容)上
git checkout [被合并分支名]
#第二步:执行 merge 命令
git merge [有新内容分支名]
`
8、远程操作
#创建远程库地址别名,别名可不用每次都使用很长的远程地址(https)
git remote add [别名] [远程地址]
#查看当前所有远程地址别名
git remote -v
#下载一个项目和它的整个代码历史,初始化本地库
git clone [远程地址]
# 上传本地指定分支到远程仓库
git push [别名] [分支名]
# 取回远程仓库的变化,并与本地分支合并
git pull [远程库地址别名] [远程分支名]
#pull=fetch+merge
git fetch [远程库地址别名] [远程分支名]
git merge [远程库地址别名/远程分支名]
9、SSH 免密登录
#1.进入当前用户的家目录
cd ~
#2.删除.ssh 目录
rm -rvf .ssh
#3.运行命令生成.ssh 密钥目录(注意:这里-C 这个参数是大写的 C)
ssh-keygen -t rsa -C nicahead@gmail.com
#4.进入.ssh 目录查看文件列表
cd .ssh
ls -lF
#5.查看 id_rsa.pub 文件内容
cat id_rsa.pub
#6.复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys->New SSH Key->输入复制的密钥信息
#7.使用ssh远程地址进行推送文件测试
参考:
- 一个小时学会Git
- 尚硅谷git教程