git 笔记

基本介绍

Git 是目前世界上最先进的分布式版本控制系统

img

环境准备

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

备注:

  1. 如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
  2. 但如果省略本地分支名,则表示删除指定的远程分支, 因为这等同于推送一个空的本地分支到远程分支

推送标签

# 推送指定标签到远程
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

附录备注

https://www.jb51.net/article/126605.htm

posted @ 2020-06-23 13:26  ut0p1a  阅读(147)  评论(0)    收藏  举报