git
1. 前言:
svn: 是集中式版本控制系统, 版本库放置在*服务器上;
git: 是分布式版本控制系统, 没有*服务器,每个人的电脑就是一个完整的版本库
卸载: 先删除git的环境变量, 再卸载
2. Linux基本命令
cd
cd ..
pwd
ls
clear
history
查看历史命令 help
#
表示注释
touch a1.txt
rm a1.txt
新建文件, 移除文件
mkdir test
rm -r test
新建文件夹, 移除文件夹
mv a1.txt test
移动文件到文件夹
3. git 本地配置操作
git config -l #显示所有git配置
git config --system --list #显示系统配置
git config --global --list #显示本地用户配置
#系统配置文件的位置: git/etc/gitconfig文件
#本地配置文件位置: C:/user/myuser/.gitconfig文件
# 使用 git config --system -e # 可以直接打开配置文件
git config --global user.name ""
git config --global user.email "" # 配置用户名和邮箱
4. git理论
工作目录: working directory
暂存区: stage
资源库: repository/ git directory
远端仓库: remote repository
.git 文件夹中,head 指向当前工作目录,local repo , index指向暂存区stage
版本控制下的文件状态:
untracked: 未跟踪, 文件在文件夹中,但没有加入到git库中,不参与版本控制。通过add变为staged
unmodify: 文件入库,没有修改,即版本库中的文件快照内容和文件夹中的一致。如果被修改,则为modified;如果被 git rm 移除则为untracked
modified: 文件仅仅被修改,没有其他操作;git add 进入staged; git checkout 丢弃返回到 unmodify,实际位: checkout时,从版本库中取出文件,覆盖当前的修改。
staged: 暂存状态 使用git commit将修改同步到版本库中,这时库中的文件和本地文件一致,文件为unmodify状态;使用 git reset HEAD filename 取消暂存,文件则为modified。
5. git命令
#本地仓库搭建(在一个新的文件夹中进行初始化)
git init
或者
#去远程仓库clone (需要配置ssh)
git clone git@xxxx # 选择ssh的,方便之后提交
#开始版本控制: 添加了一个文件 new.txt
git status #查看文件的状态
git add new.txt # 提交到stage暂存区 使用 . 表示add所有的修改文件
git commit -m "描述" # 提交到本地仓库中
git push #提交到远程仓库
关于git提交的资源过滤:(忽略某些文件,仅提交工作文件)
在主目录下新建 .gitignore
文件,规则如下:
-
#
表示注释 -
*
表示多个字符?
表示一个字符[abc]
表示可选字符范围,{String1, String2}
表示可选字符串 -
!
表示额外规则,该文件不被忽略, 如: *.txt 忽略所有txt文件,但 !first.txt 表示该文件不被忽略。 -
路径分隔符在前面: 表示只忽略此文件夹
eg: 文件目录有: root下的temp 和abc/temp 两个文件夹
/temp 表示只忽略 root/temp下的文件,abc/temp不受影响
temp/ 表示忽略所有子文件夹下的temp文件夹
*.txt
!lib.txt # 所有txt文件忽略但lib.txt保留
添加部分 :
- 基础操作添加
git diff # 查看workspace和staging中的区别
#查看之后,如果已经add到staging中,用
git diff --cached #查看staging中的文件和repo文件的区别
git log # 查看提交记录
git show # 显示修改的内容
git add -p # 当1.txt 添加一行 2.txt添加两行时, 可以选择提交到staging区的某一个文件
# 当1提交后,继续-p 2.txt, 选择s(split), 可以选择2中修改的哪一行
- 管理变化
管理变化:
head, master, commit hash(6个数字,代表版本号,可以通过git reflog查看获取)
指令:
checkout: 丢弃本地修改,
reset: 丢弃staging上的变化,把staging变的和repo一样
reset --hard 提交 强行把repo指向另一个提交, head~是head之前的一个版本,head~2是之前的之前,3是之前三个版本 本地也退回
# add之前的文件, 添加了stupid,
git checkout 文件名 # 退回到修改之前
# git add 到 staging之后,退回到修改之前
git reset 文件名 # 把文件退回到工作区
git checkout 文件名
#git commit 到repo之后,退回到上一个版本
git reset --hard head~ # 直接退回到修改之前
- 远程操作
git push origin master # clone的地址就是一个origin, master是本地的主分支
git remote -v # 可以查看从clone下来的是origin, push到了origin
6. ssh连接
为了实现免密码登录
ssh-keygen -t rsa -C"邮箱"
三次回车,生成的密钥在C:/user/myuser/.ssh/id_rsa.pub
在github中添加
使用
git -T git@github.com 测试
7. IDEA 集成操作git、分支介绍
git pull --rebase #从远端更新都使用这个rebase(把最新的仓库拉去下来)
#本地拉取的时候是v0, 修改之后是v0.1, 这是远程变成了v1;
# 1. 首先 重新拉去
git pull --rebase
# 2. merge合并(解决冲突)
打开文件,把head删除,把add也删除
# 3. add到staging
git add .
# 4. rebase继续
git rebase --continue
# 5. 提交到远程
git push
工作流: