关于Git的几个概念
- 版本库(仓库):储存代码文件等的地方
- 本地仓库:本机仓库
- 远程仓库:充当‘中央服务器’,用于不同节点之间进行代码交换的地方
- 克隆:复制
- 分支branch:不同分支做不一样的事情,用于协同开发
- 标签:用于标注版本信息的‘指针’指向某一个commit位置
常用指令
1、新建空目录(用来创建仓库)
mkdir kkgit # 创建目录
cd kkgit # 打开空目录
2、初始化仓库,将目录转为仓库
git init # 初始化
ls -ah # 查看仓库...
ls -al
ls
# 创建空仓库后进行账户配置
git config --global user.email '[email protected]'
git config --global user.name 'klausLyu'
3、删除仓库:删除文件夹下隐藏的 .git
文件夹即可,删除该文件家后,仓库转为目录,目录中的文件仍旧会保留。若回复目录为仓库,执行 git init
、 git add .
和 git.commit -m '...'
等指令
ls .git # 1) 转到目录下的 .git 文件
rm -rf .git # 2) 删除 .git 文件,前面不加 git, ' rm -rf .git '
4、仓库中创建文件(终端创建 或者 直接仓库中创建好文件)
# 通过命令创建文件
touch test.txt # 创建txt文件, touch指令
vi test.txt # 终端中直接打开test.txt文件,浏览模式
i # 浏览模式 --> 插入模式 i 或 o 或 a (注意三者的区别),输入内容即可
ESC # 插入模式 --> 浏览模式
:wq # 浏览模式下输入 :wq 保存并退出文本编辑 (shift+:/; --> :)
cat test.txt # 查看文件
4、添加文件到 git 仓库和删除文件(添加但并未入库,只是存储在暂存区,等待入库)
git add test.txt # 添加文件, 没有任何提示表示没问题
# 添加多个文件: git add abc.txt def.txt ---文件名之间用空格
# 批量添加所有文件:git add .
# 修改文件名:abc.txt --> abcd.txt
# code: git add abcd.txt
git rm abc.txt
git commit -m 'rename for abc.txt to abcd.txt'
# 删除文件: git rm test.txt
5、使用git将文件提交到仓库
git commit -m 'add a file of test.txt'
6、查看当前仓库的状态(是否有改动未add/rm和提交,未处理的)
git status # 若有未处理的,重复4和5的步骤,将所有改动处理并提交
7、查看修改的文件内容和日志log文件
git diff test.txt # 查看修改的文件内容
git log # 查看日志文件,获取提交记录
8、版本回退
git reset --hard HEAD^ # 回退到上一个版本
git reset --hard 版本号 # 版本号可通过git tag...指令进行指定
9、使用SSH进行上传提交更新时需要公钥(ssh协议
)
- 生成获取pubkey:
ssh-keygen -t rsa -b 4096 -C 'youremail'
; - 生成的pubkey默认位置:
lixux:/home/tarena/.ssh
目录下;windows:c:/Users/'accountname'/.ssh
目录下 - 添加pubkey: 打开id_rsa.pub
cat id_rsa.pub
复制内容 在github中setting中SSH and GPG keys中添加SSH keys
添加内容为复制的内容
(报错,sign_and_send_pubkey:… 解决方法 运行 ssh-add)
10、git同步操作–建立远程仓库与本地仓库连接(先有本地仓库,后有远程仓库)
# 先有本地仓库,后有远程仓库
# 获取远程仓库,与本地仓库之间建立链接关系
# '远程仓库名'系统默认的是 origin, 也可以自定义, 建议使用默认的origin, 不会忘
git remote add '远程仓库名' '远程仓库地址(https协议 / ssh协议)'
# https协议
git remote add origin https://github.com/KlausLyu/gitdemo.git
# ssh协议
git remote add origin git@github.com:KlausLyu/testdimokk.git
# 查看远程仓库
git remote -v
# 自定义:
git remote add klausgit https://github.com/KlausLyu/klausgit.git
tarena@tedu:~/klausgit$ git remote -v
klausgit https://github.com/KlausLyu/klausgit.git (fetch)
klausgit https://github.com/KlausLyu/klausgit.git (push)
# 默认:
git remote add origin https://github.com/KlausLyu/gitdemo.git
tarena@tedu:~/klausgit$ cd ../gitdemo
tarena@tedu:~/gitdemo$ git remote -v
origin https://github.com/KlausLyu/gitdemo.git (fetch)
origin https://github.com/KlausLyu/gitdemo.git (push)
# 删除远程仓库名(不是删除远程仓库,远程仓库网页可直接删除,本地仓库 rm -rf .git)
git remote remove klausLyu
11、远程仓库和本地仓库的同步 ()
# 从远程仓库同步到本地仓库 (上班前download master到本地仓库)
git pull origin master # master可换成branch名,tag名,分别下载分支或标签
# 从本地仓库提交同步代码到远程仓库(下班前 upload master到远程仓库,也可以只上传分支,master换成分支即可)
git push origin master # master可换成branch名,tag名,分别上传分支或标签
12、克隆远程仓库到本地目录下—- 先创建远程仓库,再有本地仓库
# 自动生成对应的本地仓库,本地仓库与远程仓库相对应, https://github.com/TryGhost/Ghost.git为目标远程仓库地址
git clone https://github.com/TryGhost/Ghost.git
13、分支
# 创建分支
git branch branch_name # 语法
git branch dev
# 查看分支
git branch
# 切换分支
git checkout branch_name # 语法
git checkout dev # 会提示:已切换到dev分支
# 创建新分支并切换到该分支
git checkout -b abc # == (git branch abc; git checkout abc)
# 合并分支,将其他分支合并到当前分支
git merge other_branch_name # 语法
# 删除分支,删除不需要的分支
git branch -d branch_to_deleted # 语法
git branch -d abc
两个分支中文件名重复且修改内容不一致怎么办?
冲突提示:...冲突(内容)...
解决方案:
查看冲突:git diff 文件名称
冲突内容“
<<<<<<<<<<HEAD
当前分支修改的内容
==========
其他分支修改的内容
>>>>>>>>>>其他分支名称
手动修改要保存的内容
git add 文件名称
git commit -m ''
got merger 其他分支名称
14、标签
# 创建标签
git tag label_name # 默认标签是打在最新提交的commit上的
# 查看标签
git tag # 查看当前的所有的标签
git show labe_name # 查看标签labe_name的内容
# 对已操作过的commit进行添加标签:
git tag -a 标签名称 -m '标签注释' commit的id
# commit的id方法
git log --pretty=oneline # 完整显示commit的id
git log --prett=oneline --abbrev-commit # id的简写