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