Git
一、入门
1.1 工作区, 暂存区
在Git中有工作区和暂存区的概念. 工作区指的是文件所在的当前目录, 暂存区则是Git暂存文件变更的一个逻辑区域. 当对文件执行增删改操作时, 操作的是工作区的内容, 需要执行git add命令将文件的变更添加到暂存区之后才能提交到Git管理的版本库中. 在使用git status命令的时候经常会看到Changes not staged for commit这样的提示, 紧跟该提示的就是还没有add到暂存区变更文件, 它们的改动还在工作区中放着. 另外还有Untracked files这样的提示, 它指的是还未add到暂存区的新增文件(在工作区新增了文件, 但是还没add到暂存区).
还有一个重要的点是: 当工作区中某个文件的变更被add到暂存区之后, 再次对这个文件进行修改, 接着执行commit提交版本. 这时add到暂存区之后进行的工作区的修改是不会被提交到版本管理中的, 因为再次更改后没有将这些更改add到暂存区.
1.2 工作流
1.3 分支
二、基础命令
2.1 配置操作
全局设置提交者的姓名(若Git进行了如下配置, 后续每次
commit操作都会默认使用这个用户名):1
git config --global user.name "Jeb.Wang"
全局设置提交者的邮箱(若Git进行了如下配置, 后续每次
commit操作都会默认使用这个邮箱):1
git config --global user.email "3287566354@qq.com"
查看配置
1
2
3
4
5查看全局配置
git config --global --list
查看当前仓库配置
git config --list
2.2 基本操作
2.2.1 仓库操作
以下操作都需要在Git仓库的根目录下执行.
初始化仓库:
1
git init
查看仓库当前分支的状态:
1
git status
查看仓库版本日志(提交顺序是从近到远排序的):
1
git log
查看仓库版本日志(和
git log的区别在于: 当使用git reset操作回退版本后,git log无法查看到回退之后的版本信息, 但是git reflog可以):1
git reflog
2.2.2 基本操作
查看工作区内文件的变化(变更未存在于暂存区的时候, 对比的是版本库中的改动, 否则对比的是暂存区中的改动):
1
git diff filename
将工作区变更
add到暂存区:1
2
3
4
5添加指定文件的变更
git add filename
添加所有文件的变更
git add .将暂存区的文件提交为新版本:
1
git commit -m 'message'
移除Git版本库内文件(也可以使用常规操作: 先
rm文件, 然后add该变更到暂存区, 最后执行commit):1
2
3
4
5先从版本库移除
git rm filename
提交
git commit -m 'message'回退当前分支版本: 有两种回退版本的方式, 第一种是使用
HEAD的方式, 第二种是使用commit id. 版本回退后使用git log是没有办法看到被回退的版本号的了. 如有3个版本, 从近到远分别为:v3,v2,v1. 当使用git log的时候会按照v3,v2,v1的顺序排下来, 但是如果这时候回退到v1, 再使用git log是看不到v3和v2的了.1
2
3
4
5
6
7HEAD^表示上一个版本.
如果要回退到上上个版本则是HEAD^^
上100个版本则是HEAD~100
git reset --hard HEAD^
33af3e表示commit id, 使用git log可以看到.
git reset --hard 33af3e
2.2.3 撤销变更
撤销工作区变更(如果变更已经添加到暂存区, 那么已添加的部分变更使用该命令是无法撤销的):
1
2
3
4# 撤销单个文件修改
git checkout -- filename
# 或
git checkout filename撤销暂存区的变更(从暂存区中移除变更, 变更重新回到工作区):
1
git reset HEAD filename
综上, 如果想要撤销一个文件的变更, 但这个文件已经有变更被add到了暂存区中, 首先要做的是用git reset命令将文件的变更从暂存区中移除, 接下来使用git checkout --命令移除文件在工作区的变更.
2.4 分支操作
创建分支:
1
2
3
4
5
6
7
8
9创建并切换分支
git checkout -b branchName
先手动创建分支, 创建完后再手动切换
创建分支
git branch branchName
切换分支
git checkout branchName删除分支:
1
git branch -d branchName
合并分支:
1
git merge branchName
查看所有分支:
1
git branch
2.5 标签操作
创建标签:
1
2
3
4
5
6切换到需要打标签的分支, 然后执行
git tag tagName
给指定的commit打标签
git tag tagName commitId删除标签:
1
git tag -d tagName
查看所有分支的所有标签:
1
git tag
三、远程仓库
3.1 远程仓库
将远程仓库克隆到本地:
1
git clone address
3.2 远程分支
将代码从远程分支拉到本地:
1
2
3
4
5
6会将代码自动merge到当前分支
git pull origin branchName
将代码拉下来, 然后放到本地仓库的一个origin/branchName的分支上, 需要手动merge
git fetch origin branchName
git merge origin/branchName将代码推送到远程分支(如果不存在这个远程分支, 那么会创建它):
1
git push origin branchName
删除远程分支:
1
2
3
4先删除本地分支
git branch -r -d origin/branchName
推送到远程
git push origin :branchName查看所有远程分支:
1
git branch -r
3.3 远程标签
推送tag到远程仓库:
1
2
3
4
5推送指定tag
git push origin tagName
一次性推送所有未推送到远程仓库的tag
git push origin --tags删除远程tag
1
2
3
4先从本地删除
git tag -d tagName
从远程删除
git push origin :regs/tags/tagName