Git

简介

官网地址: https://git-scm.com/

Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种 项目

占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具

版本控制

  • 一种记录文件内容变化,以便将来查阅特定版本修订情况的系统
  • 最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本, 方便版本切换
  • 集中式版本控制工具:CVS、**SVN(Subversion)**、VSS……
  • 分布式版本控制工具:Git、Mercurial、Bazaar、Darcs……

代码托管中心

  • 代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库
  • 局域网:GitLab
  • 互联网:GitHub(外网)、Gitee码云(国内网站)

命令

设置用户签名

1
2
git config --global user.name 用户名
git config --global user.email 邮箱
  • 签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看
    到,以此确认本次提交是谁做的,Git首次安装必须设置一下用户签名,否则无法提交代码
  • 这里设置用户签名和将来登录Github(或其他代码托管中心)的账号没有任何关系

代理

添加代理

1
2
git config --global https.proxy http://127.0.0.1:端口号
git config --global https.proxy https://127.0.0.1:端口号

取消代理

1
2
git config --global --unset http.proxy
git config --global --unset https.proxy

初始化本地库

1
git init

查看本地库状态

1
git status

添加到暂存区

1
git add 文件名

从暂存区移除

1
git rm --cached 文件名
  • 不会从删除工作区的文件

提交到本地库

1
git commit -m "日志信息" 文件名

查看历史记录

精简日志

1
git reflog

详细日志

1
git log

版本穿梭

1
git reset --hard 版本号

分支

同时并行推进多个功能开发,提高开发效率

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可

创建分支git branch 分支名

查看分支git branch -v

切换分支git checkout 分支名

把指定的分支合并到当前分支上git merge 分支名

冲突

  • 合并分支时两个分支在同一个文件的同一个位置有两套完全不同的修改,Git 无法替
    我们决定使用哪一个,必须人为决定新代码内容

  • 冲突产生的表现:后面状态为MERGING

  • 解决冲突:

    • 特殊符号:

      1
      <<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix
    • 手动修改代码

    • 添加到暂存区

    • 执行提交git commit -m "日志信息"

      • 此时使用git commit命令时不能带文件名

团队协作

团队内协作

跨团队协作

A -> fork ->B

B -> pull -> -> merge -> A

GitHub

GitHub网址:https://github.com/

查看当前所有远程地址别名git remote -v

起别名git remote add 别名 远程地址

推送本地分支上的内容到远程仓库git push 别名 分支

将远程仓库的内容克隆到本地git clone 远程地址

  • 1、拉取代码 2、初始化本地仓库 3、创建别名

将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并git pull 远程库地址别名 远程分支名

SSH免密登录

  1. 运行命令生成.ssh秘钥目录ssh-keygen -t rsa -b 4096 -C 邮箱名
  2. 查看id_rsa.pub文件并复制:
    1. cd /var/root/.ssh
    2. cat id_rsa.pub

Idea集成

配置Git忽略文件

  • xxxx.ignore(前缀名随便起,建议是git.ignore)

  • git.ignore文件模版:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    # Compiled class file
    *.class

    # Log file
    *.log

    # BlueJ files
    *.ctxt

    # Mobile Tools for Java (J2ME)
    .mtj.tmp/

    # Package Files #
    *.jar
    *.war
    *.nar
    *.ear
    *.zip
    *.tar.gz
    *.rar

    # virtual machine ceash logs, see http://www.java.com/en/download/help/error_hotspot.xml
    hs_err_pid*

    .classpath
    .project
    .settings
    target
    .idea
    *.iml
    .DS_Store
  • 在.gitconfig文件中引用忽略配置文件:

    1
    2
    3
    4
    5
    6
    [user]
    name = Layne
    email = Layne@atguigu.com
    [core]
    excludesfile = C:/Users/asus/git.ignore
    注意:这里要使用正斜线(/)

在动手改本地代码之前,一定会先检查下远程库跟本地 代码的区别!如果本地的代码版本已经落后,切记要先 pull拉取一下远程库的代码,将本地 代码更新到最新以后,然后再修改,提交,推送!