git 笔记
基本介绍
Git 是目前世界上最先进的分布式版本控制系统

环境准备
CentOS
yum install -y git
Ubuntu
sudo apt-get install git
配置说明
显示当前配置
git config --list
编辑配置文件
git config --global -e
设定配置项的值
git config --global 配置项 "值"
| 配置项 | 说明 | 备注 |
|---|---|---|
| user.name | 用户名 | |
| user.email | 邮箱 | |
| core.autocrlf | input | |
| safecrlf | 是否拒绝提交包含混合换行符的文件 | true / false |
本地仓库
# 在当前目录初始化Git仓库
git init
# 新建目录,并将其初始化为Git仓库
git init 仓库名
# 从远程克隆仓库到本地
git clone 远程仓库地址
分支管理
查看
# 查看本地分支
git branch -vv
# 查看远程分支
git brach -r
# 查看所有分支
git branch -a
新建
# 从当前commit新建分支, 但仍停留在当前分支
git branch 新分支名
# 从当前commit新建分支, 并切换到该分支
git checkout -b 新分支名
# 从指定commit新建分支
git branch 新分支名 commit记录
# 远程已有分支, 本地没有(指定名字)
git checkout -b 远程仓库名/远程分支名 新分支名
# 新建远程分支, 本地已有分支, 远程没有
git branch --set-upstream 本地分支名 远程仓库名/远程分支名
# 新建本地分支, 远程已有分支, 本地没有(同名)
git checkout --track 远程仓库名/远程分支名
# 新建本地分支, 远程已有分支, 本地没有(指定名字)
git checkout -b 远程仓库名/远程分支名 新分支名
# 新建干净分支(保留当前所有改动, 但没有提交记录)
git checkout --orpah 分支名
删除
# 删除本地分支
git branch -d 本地分支名
# 删除远程分支
git branch -dr 远程仓库名/远程分支名
重命名
# 重命名本地分支
git branch -m 旧分支名 新分支名
合并
# 合并指定分支到当前分支
git merge 分支名
# 禁用快速合并
git merge --no-ff 分支名
# 选择commit, 合并到当前分支
git cherry-pick commit记录
标签管理
查看
# 查看本地标签
git tag
# 查看远程标签
git ls-remote --tags origin
新建
# 在当前commit记录新建tag
git tag 标签名
git tag -a 标签名 -m "注释信息"
# 在当前commit记录新建tag
git tag 标签名 commit记录
删除
# 删除本地标签
git tag -d 标签名
# 删除远程标签
git push origin 远程分支名 --delete 标签名
版本管理
转移
查看
git stash list
保存
git stash
恢复
# stash内容恢复
git stash pop
# stash内容应用
git stash apply 指定stash
# stash记录删除
git stash drop 指定stash
暂存
添加文件
# 添加多个文件
git add 文件名1 文件名2 ...
# 添加目录
git add 目录名
# 添加当前目录下的所有文件
git add .
删除文件
# 同时删除工作区和暂存区的文件
git rm 文件名1 文件名2 ...
# 删除暂存区的文件, 但保留工作区的文件
git rm --cached 文件名
重命名文件
# 同时修改工作区和暂存区的文件的文件名
git mv 旧文件名 新文件名
提交
# 提交暂存区的全部文件到仓库区
git commit -m "注释信息"
# 提交暂存区的指定文件到仓库区
git commit 文件名1 文件名2 ... -m "注释信息"
# 将暂存区改动合并到当前commit
git commit --amend --no-edit
# 将暂存区改动合并到当前commit, 并重写注释
git commit --amend -m "注释信息"
# 提交工作区中的已跟踪文件到仓库去(仅对tracked文件有效)
git commit -a -m "注释信息"
# 强制推送到远程
git push origin HEAD --force
切换
git checkout 分支名/标签名/commit记录
回退
git reset 命令的本质是移动 HEAD 以及它所指向的 branch
撤掉当前修改
# 放弃工作区修改 (使和暂存区/工作区一致)
git checkout .
git checkout 文件名
# 清空暂存区
git reset
# 使工作区和版本库一致 (禁止对tracked文件)
git reset --hard
# 删除没有track的文件
git clean -f
# 删除没有track的文件夹
git clean -d
# 暂时将未提交的变化移除
git stash
git stash pop
撤销commit操作
# 修改HEAD指针, 差异留存暂存区,工作区不变
git reset --soft [记录ID]
# 修改HEAD指针, 清空暂存区, 差异留存工作区 (与原工作区改动并存)
git reset [记录ID]
git reset --mixed [记录ID]
# 修改HEAD指针, 清空暂存区, 使工作区和仓库一致 (仅针对tracked文件)
git reset --hard [记录ID]
新建撤销提交
git revert 记录ID
备注:git reset --hard 和 git clean -fd 结合使用他们能让你的工作目录完全回退到最近一次 commit 的时候
记录
git log
# 单行显示提交记录
git log --oneline
# 显示修改的统计信息
git log --stat
# 仅显示复合条件的提交记录
git log --grep 关键字
# 只显示最近的N次提交记录
git log -次数
# 查看短提交记录
git shortlog
比较
暂存区 - 工作区
# 查看暂存区和工作区的差异
git diff
# 比较暂存区和最近一次commit的不同
git diff --cached
# 比较当前分支与指定分支之间的差异
git checkout -p 分支名
git whatchanged 文件名
# 查看[指定文件][最近N次]变动的差异
git log -p [-N] [文件]
# 查看[指定文件]版本历史
git log --follow [文件]
git whatchanged [文件]
# 查看某次提交发生变化的文件
git show --name-only [提交记录]
# 查看暂存区和上一个commit的差异
git diff --cached [文件]
# 查看工作区与当前分支最新commit之间的差异
git diff HEAD
# 查看两次提交之间的差异
git diff 提交记录1...提交记录2
远程同步
查看
# 查看所有远程仓库
git remote -v
# 查看某个远程仓库信息
git remove show 远程仓库名
新建
git remote add 远程仓库名 远程仓库URL
配置
修改远程仓库地址
git remote origin set-url 远程仓库地址
设置分支跟踪关系
git branch -u 远程仓库名/远程分支
删除
git remote rm 远程仓库名
取回
# 取回远程分支的变化
git fetch --prune
# 取回远程分支的变化,并与本地分支合并
git pull 远程仓库名 本地分支名
git pull 远程仓库名 本地分支名:远程分支名
推送
推送分支
# 推送指定分支到远程仓库
git push 远程仓库名 本地分支名
git push 远程仓库名 本地分支名:远程分支名
# 强行推送 (即使有冲突)
git push --force 远程仓库名 本地分支名:远程分支名
# 推送同时设定追踪关系
git push -u 远程仓库名 本地分支名:远程分支名
# 推送所有分支到远程仓库
git push --all
备注:
- 如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
- 但如果省略本地分支名,则表示删除指定的远程分支, 因为这等同于推送一个空的本地分支到远程分支
推送标签
# 推送指定标签到远程
git push 远程仓库名 标签名
# 推送所有标签到远程
git push 远程仓库名 --tags
补丁管理
生成
git format-patch HEAD^ # 生成最近的1次commit的patch
git format-patch HEAD^^ # 生成最近的2次commit的patch
git format-patch 旧版本..新版本 # 生成两次commit之间的patch
场景案例
gitlab 初始化
- 创建新仓库
git clone https://xxxx.git
cd xxxx
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
- 推送已有文件
cd existing_folder
git init
git remote add origin https://xxxx.git
git add .
git commit -m "Initial commit"
git push -u origin master
- 推送已有仓库
cd existing_repo
git remote rename origin old-origin
git remote add origin https://xxxx.git
git push -u origin --all
git push -u origin --tags
问题总结
1. 删除文件
# 同时删除分支、暂存区和工作区
git rm -r 文件夹名
# 只删除分支和暂存区(保留工作区)
# 常用于修改 .gitignore
git rm --cached -r 文件夹名
git commit -m "注释"
git push origin master
2. 忽略所有软连接
find . -type l >> .gitignore
find . -type l | xargs -i git rm -r --cached {}
3. 强制远程分支更新到本地
git fetch --all
git reset --hard origin/远程分支名
git fetch
4. 追加文件但不新增提交记录
git add .
git commit --amend --no-edit

浙公网安备 33010602011771号