下载安装
阿里镜像:http://npm.taobao.org/mirrors/git-for-windows/
下载完成后安装一直选择下一步即可
菜单
Git Bash:Linux & Unix风格的命令行(推荐使用)
Git CMD:Windows风格的命令行
配置
#查看配置
git config -l
#查看系统配置
git config --system --list
#查看当前用户配置
git config --global --list
**相关配置文件: **
- Git\etc\getconfig:在Git安装目录下的 gitconfig文件 ===》系统配置
- C:\User\Administrator.gitconifg:当前登录用户的gitconfig文件===》全局(global)配置
设置用户名和邮箱
Git在每次提交时,都会使用到设置的用户名和邮箱信息
#设置用户名
git config --global user.name "xxxxx"
#设置邮箱
git config --global user.email "xxxxx"
global为全局配置,Git总是将使用该信息来处理操作。若在特定场景下需要使用不同的用户名和email地址,可以使用该命令去掉 --global。
使用Github&Gitlab&Gitee等远程仓库
1. 首先注册登录
2. 设置本机绑定ssh公钥,免密登录(从远程仓库克隆时复制ssh,避免繁琐登录)
两种方式的比较:
https方式:每次都需要输入密码和用户名
ssh方式:使用SSH密钥避免繁琐的登录问题
#进入 C:\Users\Administrator\.ssh 目录
#生成公钥
ssh-keygen -t rsa
3. 生成密钥后,进入 C:\Users\Administrator.ssh 目录打开id_rsa.pub,复制公钥
4. 打开Gitlab选中SSH Keys将公钥复制Key框中,选中Add Key即可
5. 在Gitlab端新建一个项目,选择Clone with SSH
6. 进入存放项目的文件夹,右击文件夹,选择Git Bash Here
git clone xxx
Git基本操作
工作流程
#从远程仓库克隆项目至工作台
git clone xxxx
#工作台上对项目进行修改后,提交到暂存区
git add .
#将暂存区的文件,提交至本地仓库
git commit -m "消息内容"
#将本地仓库上的文件,提交至远程仓库
git push
文件的四种状态
- untracked:未跟踪,此文件未加入到git库,不参与版本控制
- unmodify:文件已加入到git库,未修改,文件内容与本地库的文件快照完全一致
- modified:文件已加入到git库,经过修改,文件内容与本地库的文件快照不一致
- staged:暂存状态
查看四种文件状态
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
四种状态的切换
- 在工作区新建一个文件 xxx.txt,此时的文件状态为 untracked(未跟踪)
- 执行git add . ,此时文件状态为 staged(暂存状态)
- 执行git commit -m "消息内容",此时文件会存到本地仓库
- 对该文件进行修改,再次git status,文件进入modified(文件与仓库不一致)
- 再次执行git add . 并 commit ,文件进入unmodify状态(文件与仓库完全一致)
- 执行git push,将文件push到远程仓库中,可以在远程仓库查看新增的文件
忽略文件
实际上很多时候,不希望把某些文件加入到版本控制中,一般在项目中都会有.gitignore文件
#忽略所有 .txt 结尾的文件
*.txt
#忽略除 aaa.txt 除外的所有 .txt 结尾的文件
!aaa.txt
#忽略项目根目录的文件,不包括abc目录
/abc
#忽略 zzz/目录下的所有文件
zzz/
#会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
IDEA中集成Git
- 新建项目,绑定Git(将克隆下来的远程仓库的git文件目录拷贝至项目中即可)
- 修改文件,用IDEA操作(add至暂存区 =》 commit至本地仓库 =》 push至远程仓库)
Git分支操作
几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
使用分支将工作切分开来,从而让我们能够在不同开发环境中做事,并来回切换。
常用指令
#列出所有本地分支
git branch
#列出所有远程分支
git branch -r
#新建一个分支,但仍停留在当前分支
git branch [branch-name]
#新建一个分支,并切换到该分支
git checkout -b [branch-name]
#合并指定分支到当前分支
git merge [branch]
#删除分支
git branch -d [branch-name]
#删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
分支合并
一旦某分支有了独立内容,就需要将其合并回主分支
二路合并(逐行对比,发现行内容不同报冲突)
本地提交
System.out.println("hello world");
其他提交
System.out.println("world hello");
假设两者修改同一个文件后合并时发现这一行不一致,git无法选择保留或丢弃本地提交和其他提交,只能报冲突让人为处理。
三路合并
// master
System.out.println("hello1");
// dev1
System.out.println("hello1");
// dev2
System.out.println("hello2");
// merge 后
System.out.println("hello2");
master:主分支,为dev1和dev2的公共祖先
dev1:开发者1
dev2:开发者2
当前时dev1没有进行修改,而dev2进行了修改,git会自动把结果合并为dev2的代码
// master
System.out.println("hello1");
// dev1
System.out.println("hello2");
// dev2
System.out.println("hello3");
而如果dev1和dev2都进行了修改,此时会产生合并冲突,git无法合并,需要人为进行合并
即人为选择dev1的修改还是dev2的修改
版权归原作者 BeHumble的Leo 所有, 如有侵权,请联系我们删除。