一、安装与常用命令
   
    
    
    (一)安装配置
   
- 安装Git
 - 设置用户名和email地址,每次提交都会使用该用户的信息(必做)。
 
git config --global user.name "fn"
git config --global user.email "邮箱"
查看配置信息
git config --global user.name
git config --global user.email
- 
     可以为常用命令设置别名
A. 打开用户目录(如windows的
C:\Users\
),创建
.bashrc
文件
B. 可能系统不允许用户创建点开头的文件,这时可以在git命令行创建
touch ~/.bashrc
C.
.bashrc
的内容,例子如下: 
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
alias ll='ls -al'
- 
     如果要输入中文,可能有乱码问题,解决如下:
A. 打开命令行执行
git config --global core.quotepath false
B.
git安装目录/etc/bash.bashrc
文件最后加入下面两行 
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
    
    
    (二)获取本地仓库
   
    要使用Git进行版本控制,首先就要
    
     获得本地仓库
    
    
    A. 在任意路径下创建一个空目录,
    
     作为本地Git仓库
    
    
    B. 进入目录,在目录中打开Git bash
    
    C. 执行
    
     git init
    
    
    D. 执行成功会有一个隐藏的
    
     .git
    
    目录
   
    
    
    (三)基础操作命令
   
    git add:从工作区 –> 暂存区
    
    git commit 从暂存区 –> 本地仓库
    
    
    
    首先新建一个文件后
   
- 
     
git status
查看修改的文件状态,如刚新建文件时的状态.
     - 
     
git add .
将当前工作区(目录)的所有文件
添加到暂存区
;也可以
git add test.txt
提交指定文件到暂存区
。
     - 
     
git commit -m "说明"
暂存区>>仓库
     - 
     使用
git log [option]
可以看见提交记录。 
- 
     
--all
显示所有分支 - 
     
--pretty=oneline
将提交信息显示为一行 - 
     
--abbrev-commit
输出更短的commit的id - 
     
--graph
以图的形式显示
一般使用时这些参数都会加上,
git log --all --pretty=oneline --abbrev-commit --graph
,这时命令很长,就可以通过设置别名的方式解决问题。 
    
    
    (1)版本回退(版本切换)
   
    
     git reset --hard commitId
    
    可以跳转到ID对应的版本。
    
    比如:新建了一个文件,提交;然后在文件中加了内容,再提交。这时就有两个commit
    
    
    
    如果想回到未加内容的版本,就
    
     git reset --hard ab87d8f
    
    。
    
    
     git reflog
    
    查看历史记录,如果想再回到修改版本,就需要推断出修改版本的commitId(因为回退了,git log查看不到对应的id了)
   
    
    
    (2)设置某些文件不参与提交Git
   
- 
     新建一个
.gitignore
文件。 - 
     在文件中写要忽略的文件名(可以用模糊匹配)
     
    
    
    (四)分支
   
    分支可以把工作从
    
     开发主线
    
    上分离开来进行
    
     重大Bug修改、开发新功能
    
    ,
    
     以免影响开发主线
    
    。
   
    
    
    (1)基本命令
   
- 
     查看本地分支
git branch
 - 
     创建新分支
git branch 分支名
 - 
     
切换分支
git checkout 分支名
可以直接切换到一个不存在的分支(创建并切换)
git checkout -b 分支名
 - 
     
合并分支
git merge 指定分支名
将指定分支合并到当前分支,一般是站在
master
上合并其他分支。 - 
     删除分支
git branch -d 分支名
删除分支时,需要做各种检查
git branch -D 分支名
不做任何检查,强制删除(小d删不了,就用大D) - 
     
解决合并冲突
产生原因:在两个分支上同时修改了同一文件的同一行(如果不是同一行,git会自动合并内容),这时合并分支就会报分支合并失败。
处理步骤:
A. 处理文件冲突的地方(打开冲突文件,git会有提示)。
B. 将解决完冲突的文件加入暂存区并提交。
     
    
    
    (2)开发中分支使用原则与流程
   
    
    
    二、Git远程仓库
   
    
    
    (一)基本命令
   
- 
     可以为远程库创建别名
git remote -v
查看当前创建的别名
git remote add 别名名称 https://XXX远程仓库的url
创建别名
git remote set-url 别名名称 URL
修改别名 
| 区别 | push | clone | 
|---|---|---|
| https | 需要验证用户名密码(就算配置了SSH也要) | 随意克隆任何项目 | 
| ssh | 配置了SSH就直接push,不需要验证(除非设置了SSH密码) | 必须是该项目的拥有者(在GitHub配置了SSH的) | 
- 
Push推送
到远程仓库
git push 别名/仓库URL 分支名
遇到问题
:GitHub不再支持密码凭证Push。
解决办法:(注:也可以配置SSH,更方便)
A. 进入GitHub得到Token。
B. 修改远程仓库别名,将token加进去
git remote set-url 别名名称 https://Token@github.com/账户名/仓库名.git
eg:
git remote set url test01 https://XXXXXX@github.com/Fu_nan/git_test01.git
C. 再执行Push
方法链接
 - 
Fetch抓取
远程仓库
git fetch [remote name] [branch name]
A. 不指定别名和分支名,则抓取所有分支。
B.
抓取就是将远程仓库的更新都抓取到本地,不会进行合并
。 - 
Pull拉取
远程仓库
git pull 别名/仓库URL 分支名
A. 当本地仓库和远程仓库内容不一致时,想要远程仓库的内容,就需要拉取。
B. 不指定别名和分支名,则拉取所有分支并更新当前分支。
C.
拉取就是将远程仓库的修改拉到本地并自动进行合并,等同于fetch+merge
。 
遇到问题
:报错10054和Timed out
解决办法:
====================================
解决10054问题
git config –global http.sslVerify “false”
git config –global https.sslVerify “false”
====================================
解决Timed out问题
git config –global –unset http.proxy
git config –global –unset https.proxy
- 
     
Clone克隆
远程仓库
git clone 仓库URL
Clone后会有三个操作:1、拉取代码 2、初始化本地仓库 3、创建别名(自动创建链接的别名) 
    
     合并冲突
    
    
    
   
    
    
    (二)团队协作
   
    甲:仓库创建者 乙:需要协同开发
    
    甲:点进项目>>Settings>>Collaborators>>Add people>>对方的username or email>>邀请后Pending Invite复制邀请链接发送给乙。
    
    乙:复制链接到浏览器>>Accept invitation接受邀请,乙就加入了开发,可以Push内容到仓库了。
   
    
    
    (三)SSH免密登录
   
- 
     在
用户目录
下生成
.ssh
目录
ssh-keygen -t rsa -C email
,全点回车。 - 复制公钥(.pub)>>GitHub的Settings>>SSH and GPG keys>>New SSH key
 - 
     
ssh -T git@github.com
测试是否配置成功
设置SSH后,就可以不用Token的方式去操作仓库,更方便。 
    
    
    三、在Idea中使用Git
   
    
    
    (一)配置Git
   
    Idea会自动寻找Git的安装位置,点击Test可以测试是否有效;
    
    如果没有自动寻找到就自行指定Git的位置(精确到git.exe)
    
    
   
    
    
    (二)操作Git
   
- 在GitHub创建远程仓库
 - 
     Idea中初始化本地仓库并提交到远程仓库
A. 新建
.gitignore
,加入
.idea
等不需要被管理的文件。(.gitignore一般都是通用的,如下) 
# Created by .ignore support plugin
### Java template
*.class
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
*.zip
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.idea
*.iml
*.bak
*.class
*.rar
*.log
.project
.settings
.classpath
target
classes
lib
*.DS_Store
.gradle
build
out
log
    B. 初始化本地仓库
    
    
    
    
    
    C. 提交到本地仓库(中间可能有弹窗,确定就行)
    
    
    
    
    
    
    
    D. 提交到远程仓库
    
    
    
    
    
    3. 克隆远程仓库Git>>Clone…
    
    
    
    4. Push冲突。
    
     多人协同开发时,无论任何时候想要Push时首先Pull,然后再Commit并Push
    
    
    如果有提交冲突,Idea会有提示,通过图形化界面就可以解决。
   
    
    
    (三)分支
   
    
   
    
   
    
    
    四、注意事项
   
- 切换分支前先提交本地的修改
 - 代码及时提交,提交了就不会丢
 - 
     谨慎删除文件目录
     
    
    
    五、GitHub
   
    
    
    (一)同时使用GitHub和GitLab
   
    对于以上两个参考文章,遇到的坑:
    
    
    
    
   
 

