概述
git安装好后, 可以在任何一个文件夹,右键打开Git Bash
. 可以在该程序中直接运行linux命令或git命令
git工作机制的核心在于3个区:
- 工作区: 电脑的本地目录(该目录中有创建的.git目录)
- 暂存区: 暂存区的数据保存在.git/index文件中
- 本地仓库: 一般从远程仓库通过
clone
创建, 之后可以通过pull
保持与远程仓库的同步; 另一种方式是使用init
在当前目录创建仓库.
git作为分布式版本管理软件与集中式的svn的最大区别在于
- 分布式中, 每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库, 可以在本地仓库上进行独立开发.
- 而集中式的SVN, 只有一个中央仓库, 所有版本信息都放在中央仓库上, 脱离了服务器,开发者便无法工作. 同时中央仓库的数据丢失也不会有其它备份,
git也有好用的GUI工具TortoiseGit
, 作为开放人员用的最多的也还是在idea上使用git. 这里整理git的命令, 主要为了熟悉git, 以及深入对git的理解.
常用的Git命令
与本地仓库操作相关
命令 | 含义 |
---|---|
git init | 初始化本地库 |
git status | 查看本地库的状态(git status -s 简化输出结果) 3种状态:1. 无任何信息 2. 绿色文件 3. 红色文件 |
git add [file] | 多功能命令: 1. 开始跟踪新文件 2. 把已跟踪的文件添加到暂存区 3. 合并时把有冲突的文件标记为已解决状态 |
git commit –m “xxx” [file] | 将暂存区的文件提交到本地库,-m 后面为修改的说明 |
设置Git账户
命令 | 含义 |
---|---|
git config --list | 查看所有配置 |
git config --list --show-origin | 查看所有配置以及所在文件位置 |
git config --global user.name xxx | 设置git用户名 |
git config --global user.email xxx | 设置git邮箱 |
git init | 初始化本地库 |
git config core.autocrlf false | 取消换行符转换的warning提醒 |
git config --list --show-origin
: 可以查看配置文件, 在配置文件上直接修改配置
--global
: 用于设置全局账户, 而不是某个项目的
忽略文件
在idea中可以使用maven
, java
, scala
等模板. 也可以自己编写该文件.
# 忽略所有的
.a 文件 *.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 file 文件,而不忽略 subdir/file. 不递归的忽略
/file
# 忽略任何目录下名为 dir 的文件夹 递归的忽略
dir/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
版本切换
命令 | 作用 |
---|---|
git log | 以完整格式查看本地库状态(查看提交历史) |
git log --pretty=oneline | 以单行模式查看本地库状态 |
git reset --hard HEAD^ | 回退一个版本 |
git reset --hard HEAD~n | 回退N个版本 |
git reflog | 查看所有操作的历史记录 |
git reset --hard [具体版本号,例如:1f9a527等] | 回到(回退和前进都行)指定版本号的版本, |
git reflog
与git log
的区别在于可以列出所有操作包括该版本之后的版本信息
注意: 因为版本的存在, git中所有文件都可以恢复, 没有真正的删除操作
文件撤回
命令 | 作用 |
---|---|
git checkout -- [file] | 从本地库检出最新文件覆盖工作区的文件(文件还没有提交到暂存区, 否则无效) |
git reset [file] 或者 git restore –staged [file] | 从暂存区撤销文件 |
git restore | 放弃在工作区的修改(还没有提交到暂存区) |
git rm --cache [file] | 撤销对文件的跟踪. |
比较文件
命令 | 作用 |
---|---|
git diff | 将工作区中的文件和暂存区进行比较 |
git diff HEAD | 将工作区中的文件和本地库当前版本进行比较 |
git diff --cached | 查看暂存区和本地库最新提交版本的差别 |
分支操作
不使用分支,就是人与人之间协作;
使用分支,就是小组与小组之间的协作;或者两个版本互不影响同时开发.
从主干中拉取分支,开发完成,将工作,合并到主干。
分支常用操作
命令 | 作用 |
---|---|
git branch -v | 查看分支 |
git branch [分支名] | 新建分支 |
git checkout [分支名] | 切换分支 |
git merge [分支名] | 合并分支 |
git branch –d [分支名] | 删除分支 |
git checkout –b [分支名] | 新建切换 |
合并分支时注意: 例如将dev
分支合并到master
上, 需要先切回到master
分支
处理分支合并时的冲突
两个分支合并式, 如果某个文件的某行在创建分支后, 同时在两个分支上都被修改, 则该行内容在合并时就会发生冲突
注意: 处理分支冲突时, 需要和组内成员商量, 确认.
处理方法
编辑冲突的文件, 把“>>>>>>>>>”、“<<<<<<” 和“========” 等这样的行删除, 编辑至满意的状态,之后 add, commit。
提交的时候注意: git commit 命令不能带文件名。
github远程仓库相关操作
简单操作
- 查看是否配置了密钥
cd ~/.ssh
- 生成密钥
ssh-keygen
- 将生成公钥拷贝值github账户的
SSH and GPG keys
中 - 测试本地仓库与github的联通性
ssh -T git@github.com
.ssh 文件夹中会多一个文件 known_hosts, 其中记录了连接的 github 的 ip 账号。 `
push
操作
本地仓库推送到GItHub
①准备本地库
②在GitHub上创建一个仓库
③增加远程地址
git remote add <远端代号> <远端地址>
<远端代号> 是指远程链接的代号,一般直接用origin作代号,也可以自定义;
<远端地址> 默认远程链接的url;
④本地库推送到远程库
git push -u <远端代号> <本地分支名称>
-u 把本地的master分支和远程的master分支关联起来
<远端代号> 是指远程链接的代号;
<分支名称> 是指要提交的分支名字,比如master;
之后再此推送时可以简写:git push
⑤查看远程分支
git remote –v
⑥查看本地库做了的修改
git status
与远程仓库同步
方式一: fetch
+ merge
方式二: pull
clone
刚开始做项目的时候,需要从远程库将项目先整到本机。
git clone <远端地址> <新项目目录名>
解决冲突
在push
之后可能会发生冲突.
冲突原因:本地库的版本和远程库的版本都做了更新, 这时需要将本地版本更新与远程保存一致.
操作: 先pull
将远端仓库的分支拉取合并到本地, 再此push