Skip to main content

index

开局一张图

image-20211222102740430

🌟 常用操作

git add # 操作时,有时会误添加一些不想提交的文件,如何解决?
# 误add单个文件
git reset HEAD 将file退回到unstage区
# 误add多个文件,只撤销部分文件
git reset HEAD # 将file退回到unstage区

git rmgit reset的区别
git rm:用于从工作区和索引中删除文件
git reset:用于将当前HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)

git rm file_path 删除暂存区和分支上的文件,同时工作区也不需要
git rm --cached file_path 删除暂存区或分支上的文件, 但工作区需要使用, 只是不希望被版本控制(适用于已经被git add,但是又想撤销的情况)

# 撤销
git reset HEAD 回退暂存区里的文件

📦 仓库管理

init

# 初始化一个git仓库
git init

clone

克隆仓库,克隆一个远程仓库也是很有技巧的,往往新手会一股脑的整个仓库克隆下来,新项目还好,如果该项目是维护已久那么大概率该仓库是非常大的,根本没必要整个克隆

# 基础使用
git clone {仓库地址} {本地目录}

# 无需密码
git clone git@gitee.com:capsion/sublime-testt.git
# 需要账号密码
git clone https://gitee.com/capsion/sublime-testt.git

# 【推荐】仅克隆最近一次提交的内容
git clone --depth=1 git@gitee.com:capsion/sublime-testt.git

# 【推荐】克隆指定分支,且指定提交次数
git clone --depth 3 -b develop --single-branch ssh://gerrit@192.168.8.2/test

rm

删除经过add的文件,既在暂存区的文件

# 删除指定文件
git rm {filename}

config

语法:git config --global {关键字.关键属性} {值}

# 显示当前设置
git config -l

# 设置换行
# 开启自动将回车替换成换行+回车 linux
git config --global core.autocrlf true

# 修改配置文件
git config --global --edit 直接修改配置文件

git config --global i18n.logoutputencoding utf-8

# 删除配置
git config --glabal --unset xxx.xxx - 删除配置

fsck

# 找回一些被reset清理掉,但之前追踪过修改的(add)版本
git fsck --lost-found

# 恢复近60次add过的文件
find .git/objects -type f | xargs ls -lt | sed 60q

📁 暂存区管理

add

创建指令,一般用来创建文件到工作区(暂存区),但不提交

# 添加所以文件
git add .

# 添加指定文件
git add "xxx/xxx/xx"

# 指定添加某些文件
git add "*.bat"

commit

将当前存在暂存区的修进行一次提交,无论之前add了多少次,都会合并到一次提交内

# 将当前的修改提交到分支
git commit -m "本次提交的说明"

git cm "本次提交的说明"

log

查看当前分支的提交历史记录,结构等信息

# 查看当前分支结构
git log

# 详细分支结构树状图
git log --graph

# 简明结构树状图
git log --graph --pretty=oneline --abbrev-commit

# 查看最近6条的记录
git log -6

查看最近一次发布变动

# 
git log <last tag> HEAD --pretty=format:%s

过滤某些commit(比如文档改动),便于快速查找信息

# 只看 feature
git log <last release> HEAD --grep feature

以视图的方式展示

image-20220705115349388

git log -6 --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

reflog

查看每次提交(commit)的版本id和记录

git reflog

status

查看当前分支状态:什么文件在缓存区,什么文件没有被追踪

# 查看缓存区
git status

stash

它帮你把手头未完成还不好提交(提交必然牵扯 commit-hook,又是运行单元测试又是静态检查的)的活收拢到一个暂存区,等新任务完成了可以再 git stash pop 恢复之前的工作。

# 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别
git stash save "save message"

# 查看stash了哪些存储
git stash list

# 显示做了哪些改动,默认show第一个存储,
git stash show
# stash@{$num} 显示与第二个存储的区别
git stash show stash@{1}

# 显示第一个存储的改动,如果想显示其他存存储
# 命令:git stash show stash@{$num} -p
git stash show -p

# 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储
# git stash apply stash@{$num} 要使用其他
git stash apply

# 令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下
git stash pop

# 丢弃stash@{$num}存储,从列表中删除这个存储
git stash drop

# 删除所有缓存的stash
git stash clear

git addgit stash 没有必然的关系,但是执行git stash 能正确存储的前提是文件必须在git 版本控制中,即被add后追踪的文件

add 那些你不想备份的文件(例如: git add file1.js, file2.js)
调用 git stash –keep-index。只会备份那些没有被add的文件。
调用 git reset 取消已经add的文件的备份,继续自己的工作。

参考资料

应用场景

📝 分支管理

branch

# 列出所有分支
git branch

# 创建分支
git branch {分支名}

# [-d]参数 删除分支
git branch -d {分支名}

# 关联远程分支
git branch --set-upstream-to=origin/dev dev - 关联远程分支

switch

>=2.3

# 切换到分支
git switch {分支名}

# 创建并切换到该分支
git switch -c {分支名}

checkout

# 切换到分支
git checkout {分支名}

# [-b] 参数就是创建分支功能, 并切换到对应分支相当于
git checkout -b {分支名}

show

查看带tag的分支

# 查看对应标签的信息
git show <tagname>

tag

基础使用

# 列出所有标签
git tag

# 列出指定版本的 tag
git tag -l 'v0.0.*'

# 查看指定标签信息
# git show v0.9
git show <tagname>

创建标签

# 创建带说明的标签
# git tag -a <tagName> -m <msg> <commitId>
git tag -a v0.0.1 -m "项目初始化" 1094abd



# 在当前分支上创建一个 v1.0.0 标签
git tag v1.0.0

# 在当前分支上创建标签
git tag -m "xxxx" <tagname>

# 在指定分支上创建标签
# git tag v0.9 f52c633
git tag <tagname> commit-id


# -m 同时添加说明
git tag -m "标签说明" <tagname> commit-id

# 移除当前分支上标签
git tag -d <tagname>

# 推送tag到远程仓库
git push <remote> <tag>

# 推送所有Tag到远端
git push <remote> --tags

diff

# 查看文件变化
git diff

git diff "xxx/xxx"

# 查看与某个版本对应的区别
git diff head{^|1-100}

merge

将当前分支与指定的分支合并

# 自动合并,默认是快速合并,不会留下分支和记录
git merge {要合并的分支名}

# 普通合并模式,留下记录并创建新分支
git merge --no-ff -m "xxx" {要合并的分支名}

reset

# 重置到不同的提交
# 重置到最后一次提交的
git reset --hard

# 删除所有没有被add过得文件
git clean -d -fx

# 重置到上一个版本
git reset --hard^
# 重置到上上一个版本
git reset --hard^^

# 或者指定的版本id
git reset --hard 1094adb

# 重置到上5个版本
git reset --hard~5

反面教材

cherry-pick

# 复制提交
# 对应提交的代号,切换到分支然后可以复制提交
git cherry-pick {分支名}

☁ 远程管理

fetch

remote

管理远程仓库

# 查看当前所有远程仓库信息
git remote

# 查看更详细的信息
git remote -v

# 创建关联的远程仓库
git remote add <name> <repo>

git remote add origin ssh/https/svn.git

# 删除远程库
git remote rm <name>

添加远程分支

语法:

  • git push <远程仓库名> <本地分支名称>:<需关联的远程分支名称>
# 首先在本地创建一个空分支
git checkout -b develop

git push origin develop:devlop

删除远程分支

语法:

  • git push <远程仓库名> :<需关联的远程分支名称>
  • git push --delete <远程仓库名>
# 方式1 将空分覆盖到指定远程分支,相当于将远程分支清空
git push origin :develop

# 方式2 使用 --delete
git push origin --delete develop

pull

push

🎁 打包发布

archive

语法:

git archive -flag <param>
git archive --format=<zip|tar> --output=</path/file.ext> <tagName>|<cinnutId>|<checkoutName>
  • -o |--output=:指定打包后的文件位置和名称格式
# 首先, 查看当前支持的打包格式
git archive --list
# 打包最新的版本库
git archive -o ../output.zip HEAD

# 打包指定的分支
git archive -o ../output/git-0.0.1.tar 5514zaa

# 打包指定的目录 比如我要打包 Docs 目录
git archive -o ../output.zip HEAD:Docs/

# 导出 tar.gz 格式
git archive HEAD:Docs/ | gzip > ../output.tar.gz
# 打包最近一次修改过的文件
git archive -o ../updated.zip HEAD $(git diff --name-only HEAD^)
# 将 master 分支 以 zip 格式打包到指定位置
git archive --format=zip --output=/path/file.zip master|<tag|head
# 导出指定 tag名称的所有相关文件
# git archive --format=zip --output=</path/file.zip> <tagName>
git archive --format=zip --output=v1.0.zip v1.0