什么是Git?

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

下面我们说一说Git常见的操作

git config 常用配置

配置邮箱和用户名

1
2
3
4
5
6
7
8
## 全局配置
git config --global user.name "your name"
git config --global user.email "xxx@xxx.com"

## 单个项目配置(先进入项目的根目录,带有.git隐藏文件的目录)
git config user.name "your name"
git config user.email "xxx@xxx.com"
## 对单个项目进行配置可覆盖全局配置

配置命令别名

1
2
## 比如给 git status 设置别名 st:
git config --global alias.st status

查看已有配置信息

1
2
3
git config --list
## 或者
git config -l

Git 创建仓库

Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

使用当前目录作为Git仓库,我们只需使它初始化。

1
2
git init
## 该命令执行完后会在当前目录生成一个 .git 目录。

使用我们指定目录作为Git仓库。

1
git init projectPath

初始化后,会在 projectPath目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

克隆仓库代码

克隆代码到当前文件夹

1
git clone 仓库地址

如果我们需要克隆到指定的目录,可以使用以下命令格式:

1
git clone 仓库地址 目标文件夹

提交三部曲

1
2
3
4
git add .
git commit -m "message"
git pull
git push

git add . 提交工作区改动到暂存区;

git commit -m “message” 提交暂存区到本地仓库;

commit完之后要记得git pull更新一下最新的远程仓库代码到本地;

最后确保没有冲突没有报错的情况下git push 提交本地修改到远程仓库;

撤销工作区变更的文件

1
2
git checkout -- filename (前提, filename 已在仓库中)
#-- 代表“ 无论如何,将其之后的 argument 视为一个文件名(filename)”

从暂存区撤销回工作区

1
git reset HEAD -- filename

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
git status    #查看当前状态
git add <filename> #提交文件到暂存区
git add . #提交所有工作区改动到暂存区
git log #查看提交记录
git log --graph #查看分支图合并
git reflog #查看近期所有操作提交记录
git branch -l #查看本地仓库分支
git branch -al #查看所有分支(包含本地分支和远程分支)
git checkout [分支名] #切换分支
git checkout -b [分支名] [远程分支] #基于某个远程分支新建分支并切换到该分支
git branch -d [分支名] #删除某分支
git merge [分支名] #分支进行融合
git remote #查看远程库信息 -v 详细信息
git tag #查看本地仓库所有标签
git tag <name> <commitId> #默认HEAD打一个标签 可指定特定commitId -m '为标签添加注释'
git tag -d <tagName> #删除某个标签
git push -d origin <tagName> #删除远程标签
git push --tags #将本地标签一次性推送到远程
git push origin <tagName> #推送指定标签到远程

分支

1.git branch

1
2
3
4
5
6
7
8
git branch -l    #查看本地分支列表
git branch -a #查看所有分支列表(包含本地分支和远程分支)
git branch 分支名xx #创建分支xx
git branch -d 分支名xx #删除本地xx分支
git branch --merged #它列出了已合并到当前分支的分支
git branch –no-merged #它列出了尚未合并的分支
git branch dev master #从 master 分支下创建 dev 分支
git branch -m dev DEV #修改 dev 分支名称为 DEV 分支

2.git checkout

1
2
3
4
5
git checkout 分支名xx    #切换到xx分支
git checkout -b 分支名xx #创建xx分支并切换到该分支
git checkout 分支名xx --force #强制切换分支xx, 修改的工作区不会被清除
git checkout -b local_branch origin/remote_branch #从远程分支remote_branch拉取到本地local_branch, 然后切换到local_branch, 并且建立映射关系
git checkout branch_name -- filename #从别的分支拉取文件到本的分支指定文件

3.git merge

1
2
3
4
5
6
git merge 分支名xx    #合并xx分支到当前分支
git merge --abort #执行合并时, 出现冲突文件, 执行操作退回未合并的状态
git merge --continue #执行合并时, 出现冲突文件, 修改冲突文件, 并且执行git add, 则继续合并
git merge feature-a feature-b #快速合并两个分支,同时非快速合并当前分支
git merge --no-commit feature-a #合并feature-a分支,但不产生一个commit 提交
git merge --squash brantch_0 #会把brantch_0的所有改动都放在当前分支但是并不会提交,本地会显示有东西未add需要手动commit,但是因为手动add,commit后在brantch_0的所有修改记录的修改人都会变成你自己,在提交记录上只会有一个提交记录。

4.其它

1
git push origin --delete 分支名xx    #删除远程分支xx

版本回滚

1
2
3
4
git reset commit_id    #修改的内容都处于工作区状态
git reset --soft commit_id #修改的内容都处于暂存区状态
git reset --hard commit_id #版本库完全替换工作区(慎用)
git revert -n commit_id #撤销某一次提交,HEAD继续往前走,用一次新的commit来反做旧的commit

合并其他分支的某次提交

1
2
3
4
git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]
[-S[<keyid>]] <commit>…​
git cherry-pick (--continue | --skip | --abort | --quit)
git cherry-pick commit_id #简单用法