git环境配置

查看不同级别的配置文件:

查看系统config

git config --system --list 

查看当前用户配置

git config --global  --list

git config 配置:

在git中,我们使用git config 命令用来配置git的配置文件,git配置级别主要有以下3类:

1、仓库级别 local 【优先级最高】

2、用户级别 global【优先级次之】

3、系统级别 system【优先级最低】

git核心理论

工作区域

git本地有三个工作区域:工作目录(working Directory)、暂存区(stage/index)、资源库(Repository或git Directory)。如果再加上远程的git仓库(Remote Directory)就可以分为四个工作区域。

Workspace:工作区,就是平时存放项目代码的地方

Index/stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表的信息。

Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。

Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。

工作流程

git的工作流程一般是这样的:

1、在工作目录中添加,修改文件;

2、将需要进行版本管理的文件放入暂存区域

3、将暂存区域的文件提交到git仓库

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

1.创建全新的仓库,需要用git管理的项目的根目录执行;

在当前目录新建一个git代码库:git init

2.执行后可以看到,仅仅在项目目录中多出了一个.git目录,关于版本的所有信息都在这个目录里面。

克隆远程仓库

1.另一种是克隆远程目录,由于是远程服务器上的仓库完全镜像一份至本地。

克隆一个项目和他的整个代码历史(版本信息):git clone url 

查看文件状态

查看指定文件状态:git status [filename]

查看所有文件状态:git status

Git分支

分支在git中相对较难,分支就是科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了。

git分支常用命令:

1.git branch:列出所有本地分支

2.git branch -r:列出所有远程分支

3.git branch [branch-name]:新建一个分支,但依然停留在当前分支:

4.git checkout -b [branch]:新建一个分支,并切换到该分支

5.git merge [branch]:合并指定分支到当前分支

6.git branch -d [branch-name]:删除分支

7.git branch -v:查看所有分支,以及自己所在分支。

8.git branch -a:查看所有分支,包括本地的和远程的。

9.git remote prune:删除远端已经删除,但在本地还存在的分支。

10.git push origin --delete [branch-name]  git branch -dr [remote/branch]:删除远程分支

11.git init:可以把一个目录变成git可以管理的仓库,这时候你当前testgit目录下会多了一个.git目录。这个目录是git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。

12.git clone url:克隆代码到本地

13.git status:可以查看当前在哪个分支以及当前有哪些需要修改过没有提交的内容。

14.git add index.html:将修改的文件添加到暂存库

15.git commit -m "修改ash地址" :将修改的内容提交到远程仓库并写上注释

16.git config --global --list:显示自己的名称和邮箱

17.git config remote.origin.url [git@www.baidu.com:添加或指定远程仓库地址](mailto:git@gitlab.mokahr.com:TryMoka/moka-gateway.git:添加或指定远程仓库地址)

15.git push  -u origin master  将修改的内容push到master分支,初次关联远程仓库以后用这个命令,将会关联到远程master分支上,以后就可以git push不指定参数了。

16.git reset --hard 版本号 移动HEAD指针,将数据还原到任意版本

17.git log --oneline 查看提交的所有版本号

18.git remote -v  显示所有远程仓库。

19.git rev-parse HEAD git rev-parse --short HEAD 获取最新commit id或者说sha的简短结果

20.git-lfs 当我们工程中有体积庞大的二进制文件时,可以使用git lfs管理大文件

21.git fetch 是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。而git pull则是将程主机的最新内容拉下来后直接合并。git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

22.git submodule update --init --recursive:使用此命令可将子模块内容下载下来后工程不会缺少相应的文件,因为使用git clone 下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,执行这个命令就可以了。

23.git merge --abort:使用该命令回到解决冲突之前的状态,该命令仅仅在合并后导致冲突时才使用,git merge --abort将会抛弃合并过程并且尝试重建合并前的状态。

24.git clean -xdf: 清除所有未被git管理的文件,这样,所有编译生成的文件都被清除了

25.git changelog:false: 将changelog选项设置成false,意味着Jenkins将不会自动获取变更记录,也不会在任务输出的Changes部分中显示。这么做唯一的好处在于,它可以减轻对版本控制系统的压力。

26.git ls-remote:显示远程存储库中可用的引用以及关联的提交ID

27.git fetch origin maste:从远程的origin仓库的master分支下载代码到本地的origin master分支 

28.git submodule update --init --recursive: 当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:git submodule update --init --recursive 即可将子模块内容下载下来后工程才不会缺少相应的文件。

解决冲突

如果同一个文件合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交!

选择要保留他的代码还是你的代码。