git相关

1. git是什么呢?

1. git是一个分布式版本控制软件.
2. 什么是版本控制呢?
    * 简单来说就是在项目的不同版本之间的切换.

2. git的作用是什么?

版本控制   团队协作

3. git的优势?

同类型的版本控制软件: svn   cvs

git的优势: git是分布式的

4. git的安装

1. windows下的安装:

从git官网(https://git-scm.com/)上下载,直接默认安装就好.

git的相关命令:
1. git --version : git的版本
2. linux上安装
    1. yum install git
    2. 使用git --version 命令查看是否安装成功
    3. 上面安装的版本会过于老旧.
    4. 从 https://mirrors.edge.kernel.org/pub/software/scm/git/ 上下载tar.gz,上传到linux,进行解压tar -zxvf 下载的压缩包
    5. 安装git依赖:yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel 和 yum install  gcc perl-ExtUtils-MakeMaker
    6. 移除已经安装的git: yum remove git
    7. 进入到git解压目录
    8. 预编译git: ./configure --prefix=/usr/local/git_2.9.5
    9. 编译并安装git: make && make install
    10. 将git的脚本软连接到/usr/bin/ 目录下: ln -s /usr/local/git_2.9.5/bin/* /usr/bin/
    11. 安装成功

5. git的入门级命令

1. 工作区 : 代码区
2. 暂存区 : 代码更改的暂时存储的地方
3. 本地仓库 : .git文件夹就是本地仓库
4. 远程仓库 : 网络上的其他地方(github等等)
5. 本地操作命令
    1. 直接 git : 调用帮助文档(git --help)
    2. git + 命令 --help : 查看某个具体命令的帮助文档
    3. git --version : 查看git的版本
    4. git init : 生成空的本地仓库(在项目的根路径下执行)
    5. git add 文件 : 将文件添加到暂存区
    6. git commit -m "注释说明" : 将暂存区提交到本地仓库(引号里面可以随便写)
        1. git commit在第一次使用之前,需要配置用户邮箱及用户名,使用下面的命令:
        2. git config --global user.email "you@example.com"
        3. git config --global user.name "Your Name"

6. 远程操作命令(前提是得有远程仓库)

1. git remote : 用于管理远程仓库
2. git push -u origin master : 往名字为origin的仓库的master分支上提交变更(初次使用需要进行登录),这个一般会在创建仓库的时候有提示.第一次之后就可以使用git push进行推送
3. git fetch : 拉取远程仓库的变更到本地仓库
4. git merge origin/master : 将远程的变更,合并到本地仓库的master分支
5. git pull :  -- 不建议使用  等同于fetch之后merge

7. git的文件状态(git status可以查看git的状态)

1. 相关命令:
    1. git status可以查看git的状态
    2. git rm: 用于git文件的删除操作
        1. 如果只是 git rm --cache 仅删除暂存区里的文件
        2.如果不加--cache 会删除工作区里的文件 并提交到暂存区
    3. git checkout
        1. 直接加文件名   从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
        2.加了【分支名】 +文件名  则表示从分支名为所写的分支名中拉取文件, 并覆盖工作区里的文件
2. 相关状态及切换
    1. 新建文件 --> Untracked
    2. Untracked/modified使用add命令将新建的文件加入到暂存区-->Staged
    3. Staged使用commit命令将暂存区的文件提交到本地仓库--> Unmodified 
    4. 如果对Unmodified状态的文件进行修改-->modified
    5.  如果对Unmodified状态的文件进行remove操作-->Untracked

8. git的图形化客户端:

1. 官网下载Sourcetree,进行安装.
2. 绕过登录:
    1. 进入C:UsersAdministratorAppDataLocalAtlassianSourceTree目录.
    2. 新建accounts.json
    3. 复制下面内容(复制完成点击安装,之后会提示未安装,选择第一个就好):
            [
        	  {
        	    "$id": "1",
        	    "$type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
        	    "Authenticate": true,
        	    "HostInstance": {
        	      "$id": "2",
        	      "$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
        	      "Host": {
        	        "$id": "3",
        	        "$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
        	        "Id": "atlassian account"
        	      },
        	      "BaseUrl": "https://id.atlassian.com/"
        	    },
        	    "Credentials": {
        	      "$id": "4",
        	      "$type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
        	      "Username": "",
        	      "Email": null
        	    },
        	    "IsDefault": false
        	  }
        	]
    4. 选择本地仓库,然后暂存所有文件,进行提交,最后进行推送到github就可以了.
   	

9. git分支:

1. 什么是分支: 软件项目中启动一套单独的开发线的方法
2. 为什么使用git:  
    1. 可以很好的避免版本兼容开发的问题,避免不同版本之间的相互影响. 
    2. 封装一个开发阶段.
    3. 解决Bug的时候新建分支,用于对bug的研究.
3. git与分支相关的命令
    1. git branch 分支名 : 创建一个分支.
    2. git branch : 查看分支,列出所有分支,分支前面有*号代表该分支为当前所在分支.
    3. 创建分支的时候,分支名不要使用特殊符号.
    4. git branch -d 分支名: 删除分支(但是不允许删除当前所在的分支)
    5. git branch -m 旧分支名 新分支名: 修改分支
    6. 提交操作:
        1. git add *
        2. git commit -m "test"
        3. git status
        4. 没有提交的单独提交一次
    7. 切换分支: git checkout 分支名(如果在分支上面对文件进行修改之后, 没有commit就切换到另外一个分支b,这个时候会报错,因为没有commit的文件在切换分支之后会不覆盖。所以Git 报错提示。)
    8.  git checkout -f 分支名: 强制切换到分支,如果当前有为提交的变更,会直接丢弃, -f 参数一定一定要非常非常小心使用,一般情况下不建议使用,除非真的要强制去执行 

10. git的log:

1. log命令的作用: 用于查看git的提交历史
2. git log命令显示的信息的具体含义
    * commit 4a70ceb24b6849ad830d6af5126c9227b333d2d1 --SHA-1 校验和  commit id
    * Author: wiggin <wiggin@gmail.com>  --作者跟邮箱概要信息
    * Date:   Wed May 16 23:51:02 2018 +0800 --提交时间
3. v2  --commit的时候,使用-m选项说写一段概要说明,日常在使用commit的时候,-m选项所写得内容一定不能随便写,“修改了登陆的bug”/“新增用户管理中心”
4. git log -数字  表示查看最近几次的提交
5. git log -p -2 显示最近两次提交的不同点
6. git log --author 查看具体某个作者的提交 
7. git log --online 输出简要的信息
8. git log --graph 以一个简单的线串联起整个提交历史
9. git log 输出信息的定制

11. git的diff命令:

1. 使用场景: 用来解决冲突,制作补丁
2. git diff 不加任何参数, 用于比较当前工作区跟暂存区的差异
3. git diff --cached 或者--staged: 暂存区与分支的差异查看
4. git diff HEAD: 工作区与分支的差异查看
5. git diff 分支名  查看当前分支跟指定的分支的差异
6. git diff 分支名1 分支名2 查看两个指定分支(已提交的)的差异,分支2 跟分支1的差别
7. git diff 文件名 查看指定文件的差异(工作区与暂存区)
8. git diff commitid1 commitid2:  用于列出两个历史提交的差异(commitid1可以从git log命令获取到)
9. git diff --stat 用于罗列有变更的文件
10. 内容的解析:
    

    diff --git a/file2 b/file2  file2的两个版本
    index c200906..29e2b3c 100644
    --- a/file2 表示变更前的文件
    +++ b/file2 表示当前文件
    @@ -1 +1,2 @@  变更前的文件的第一行  变更之后的文件的第一行往下两行 这块文件区域有差异
     222
    +111    +表示新增了一行 -表示删除了一行  如果对一行内容进行修改,在此处体现出来的就是先删除一行,再新增一行
    
    
    diff --git a/file2 b/file2
    index 29e2b3c..2e2f5e4 100644
    --- a/file2
    +++ b/file2
    @@ -1,2 +1,3 @@ 变更前第一行到第二行,变更后是第一行到第三行
     222
    +333
     111
     

12. 更改提交:

 1. 将不必要的文件add
 2. 上次提交觉得是错的
 3. 不想改变暂存区内容,只是想调整提交的信息
 4. 版本回滚
 5. 命令
    * git reset HEAD 文件名: 移除不必要的添加到暂存区的文件
    *  git reset HEAD^ 或者 commitid:  去掉上一次的提交 
    *  git reset --soft  HEAD^:  修改上次提交的信息吧即commit -m "修改这里的内容",撤回上次提交,文件保存到暂存区
    
    *  git reset --soft:  只是将HEAD引用指向指定的提交,工作区跟暂存区的内容不会改变
    *  git reset --mixed:  (默认选项)将HEAD指向指定的提交,暂存区的内容随之改变,工作区内容不变
    * git reset --hard:  将HEAD指向指定的提交,暂存区跟工作区都会改变
    

13. 分支合并及冲突解决

1. 使用merge命令进行分支合并: git merge 分支
2. 冲突解决:
    * master分离出dev分支,对a文件修改后提交,之后跑到master分支,也对a修改后提交, 之后, git merge dev分支,此时冲突产生
    * git diff --name-only --diff-filter=U 查看冲突的文件
    * git ls-files -u:  也可以显示没被合并的文件,之后使用vim对文件进行修改或者直接用开发工具进行修改

14. git标签:

1. git tag : 不添加任何参数,表示显示标签(以字母序), 非按时间.
2. git tag 标签名 : 打标签,标签名默认是给最近的一次提交打上标签.
3. git tag 标签名 commitid: commitid可以使用git log --online得到(前面的一串数字)
4. git show 标签名 : 显示与标签名相关的提交信息
5. git tag -d 标签名 : 仅仅删除标签,不会删除提交
6. git push origin(远程分支名) 标签名: 把某个标签(本地以存在的,否则推送失败)推送到远程服务器上.
7. 删除远程标签:
    * 先删除本地标签: git tag -d 标签名
    * 再删除远程标签:`git push orign(远程分支名) :refs/tags/标签名`
8. 标签跟commit挂钩,只要commit存在于多个分支,那么这几个分支就能看到这个标签.

15. .gitignore

1. 为什么要使用.gitignore 文件
大量与项目无关的文件全推到远程仓库上,同步的时候会非常慢,且跟编辑器相关的一些配置推上去之后,别人更新也会受其影响。所以,我们使用该文件,对不必要的文件进行忽略,使其不被git追踪
2. 一把情况下,.gitignore文件,在项目一开始创建的时候就创建,并推送到远程服务器上。这样大家初次同步项目的时候,就是用到该文件,避免以后,团队成员把与项目无关的文件,传到远程服务器上.
3. 编辑.gitignore(将忽略不推送到远程服务器的文件下载文件中即可):
target
.idea
4. 将文件添加到暂存区使用git add 文件名,不能使用git add * ,这个命令会忽略以.开头的文件
5. .gitignore文件的其他忽略:
    *.log 表示忽略项目中所有以.log结尾的文件
    123?.log 表示忽略项目中所有以123加任意字符的文件
    /error.log 表示忽略项目中根目录中的error.log 这个文件
    src/main/test/* 表示忽略/src/main/test/目录下的所有文件
    *.class 
    **/java/ 匹配所有java目录下的所有文件
    !/error.log 表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定
6. 如何删除已经提交的呢? 
    先使用`git rm -rf --cached 目录或文件`, 递归删除,将文件从暂存区移除. 再次使用git commit -m "注释", git push推送到远程
7. 解释6
    * 对于已经提交到远程或本地仓库的文件,.gitignore配置之后不会生效。我们必须先删除本地暂存区里的文件,之后在加上.gitignore 文件,最后再把变更提交到远程仓库上。
    * git rm --cached 文件名  从暂存区删除某个文件
    * git rm -rf --cached 文件夹 表示递归删除暂存区该文件夹的所有东西
原文地址:https://www.cnblogs.com/wadmwz/p/9702476.html