git笔记
git迷路指南
Commit格式
1 | feat: 新增 feature |
常用命令
1 | 查看hash对应的文件内容 |
工作流
1 | # 创建本地分支 |
环境配置
配置用户信息
1
2git config --global user.name "Sanzo00"
git config --global user.email "arrangeman@163.com"生成ssh-key
1
ssh-keygen -t rsa -C "arrangeman@163.com"
将生成的公钥文件
~/.ssh/id_rsa.pub
添加到Github上。
版本回退
修改文件后提交修改到版本库
1
2git add .
git commit -m "xxx"查看历史版本
1
2git log # 显示最近到最远的提交
git reflog # 显示所有执行过的命令回退到历史版本
1
2
3
4
5
6
7
8
9
10
11# 回到上一个版本
git reset --hard HEAD^
# 回到上上一个版本
git reset --hard HEAD^^
# 回到上一个版本 (同上)
git reset --hard HEAD~1
# 回到制定版本
git reset --hard commit_id
工作区和暂存区
工作区: 存放项目的目录
暂存区
1
2
3
4# 将文件的修改添加到暂存区中
git add "file"
# 把暂存区的修改提交到分支
git commit
撤销修改
1 | # 本地修改没有git add到暂存区, 回退到上一个git add或git commit |
删除文件
准备工作
1
2
3
4
5
6
7
8
9
10
11# 在工作区新建test文件
touch test
# 添加到暂存区
git add test
# 提交到分支
git commit -m "add test"
# 在本地删除test
rm test
# 工作区和版本库不一致
git status确定删除文件test
1
2
3git rm test
# git add test 等价
git commit -m "remove test"恢复工作区文件(误删)
1
git checkout -- <file>
只删除记录中的文件,本地不删除
1
git rm --cached <file>
远程仓库
添加远程库
1
2
3
4
5
6
7
8
9# 初始化本地目录为git仓库
git init
# 关联一个远程库
git remote add origin git@github.com:your_name/repo_name.git
git push --set-upstream origin master
# 本地同步远程仓库
git pull origin master
# 提交到远程仓库
git push origin master修改远程目录
1
git remote set-url origin git@github.com:your_name/repo_name.git
克隆远程库
1
git clone git@github.com:your_name/repo_name.git
本地仓库
本地仓库可以用于本地端的同步,例如将本地文件定时同步到硬盘这样的场景。
比如本地的文件夹为files
。
1 | 将文件夹初始化为git目录。 |
创建与合并分支
创建新分支
1
2
3
4
5
6
7
8# 创建dev分支
git branch dev
# 切换分支
git checkout dev
# 查看当前分支
git branch
# 查看所有分支
git branch -a合并分支
1
2
3
4
5
6# 切换到主分支, 切换前要git commit
git checkout master
# 合并dev到当前分支
git merge dev
# 删除dev分支
git branch -d dev
解决冲突
当master和dev同时修改文件, 在git merge时会出现冲突, 需要手动解决冲突, 重新提交.
1 | # 查看冲突信息 |
分支管理
1 |
|
Bug分支
当dev分支的工作未完成, 你需要紧急修复buf, 这时可以把当前分支暂时储存起来. 完成其他工作之后, 可以恢复现场继续工作.
1 | # 储存现场 |
在上面bug分支修复的错误, 在当前dev上同样也存在问题, 可以使用cherry-pick
复制一个commit
, 同事git
会新创建一个commit
1 | git cherry-pick commit_id |
更简单的, 可以先用git stash
报工作现场储存起来, 然后在当前分支修复bug
之后恢复现场继续工作.
Feature分支
当需要添加新功能时, 可以创建feature分支, 测试完成之后, 再合并到当前分支.
1 | # 创建feature分支 |
多人协作
1 | # 查看远程仓库 |
Rebase
多次本地提交或从远端pull下来之后, 本地的版本库会同时有多个commit, 通过–graph查看会觉得混乱, 可以使用rebase, 将多个commit合并成一个, 使得分支变得顺滑~.
1 | # 合并commit |
.gitignore
1 | # 忽略特殊文件 |
git服务器
安装git
1 | sudo apt install git |
新建git用户
1 | sudo adduser git |
公钥登录
将设备的id_rsa.pub
文件导入到服务器的home/git/.ssh/authorized_keys
中。
如果本地的用户名和服务器的用户名不一致,需要配置/home/user/.ssh/config
文件
1 | Host server # 别名 |
初始化
选定服务器的/srv/git/
1 | # 新建目录作为git的工作目录 |
禁用shell登录
编辑/etc/passwd
1 | git:x:1002:1002:,,,:/home/git:/bin/bash |
改为:
1 | git:x:1002:1002:,,,:/home/git:/usr/bin/git-shell |
新建仓库
1 | sudo git init --bare /srv/git/sample.git |
也可以将本地的git项目上传到服务器:
1 | # 首先将本地的项目导出为.git目录 |
克隆项目
1 | git clone git@server:/srv/git/sample.git |
空分支
1 | # 创建空分支 empty |