Home
Linux
Golang
MySQL
PHP
Other
Git常用命令
创建日期:2019-10-15 15:39:59
更新日期:2023-12-01 14:29:45
栏目:
Other
浏览:1654
[TOC] ## 常用操作 - 克隆项目 ` git clone 仓库地址` - 克隆指定分支代码 ` git clone -b 分支名称 仓库地址` - 暂存某个文件 ` git add 文件名` - 暂存多个文件 ` git add 文件1 文件2` - 暂存所有文件 ` git add .` - 提交仓库信息 ` git commit -m "提交的备注信息,一般是变更(范围):变更的内容" ` - 提交当前分支 ` git push` - 强制推送当前分支 `git push --force origin master` 慎用 - 查看git仓库大小 `git count-objects -v` 其中 `size-pack:` 就是大小(KB) - 修改全局用户名和邮箱地址 `git config --global user.name “username”`、`git config --global user.email “email”` - 修改当前项目的用户名和邮箱地址,进入到当前项目 `git config user.name “username”` - 查看当前项目的`git`用户名和邮箱 `git config user.name` ## 分支管理 - 新建分支 `git branch 分支名` - 推送新分支 ` git push --set-upstream origin 分支名` - 查看分支 `git branch` - 检出分支 ` git checkout 分支名` - 创建分支并切换 ` git checkout -b 分支名` - 查看分支提交信息 `git branch -v` - 合并分支 `git merge 分支` 把该分支的内容合并到现有分支上 - 删除分支 `git branch -d 分支名` - 根据关键字批量删除分支 `git branch |grep 'fix' |xargs git branch -D` - 强制删除分支 `git branch -D 分支名` 慎用 - 修改分支名 `git branch -m 旧分支名 新分支名` -M强制,慎用 - 列出所有远程分支 `git branch -r` - 更新 remote 索引 `git fetch` ## 标签管理 - 命令 `git tag {标签名} {提交ID}` 或者 `git tag -a {标签名} -m "{标签信息}" {提交ID}`,示例 `git tag v1.0.0`、`git tag -a v1.0.0 -m "标签1.0.0" HEAD` - 查看标签 `git tag` 或者查看某个具体的标签信息 `git show {标签名}` - 推送标签 `git push origin {标签名}` 或者一次性推送所有本地标签 `git push origin --tags` - 删除本地标签 `git tag -d {标签名}` - 删除远程标签 `git push origin :refs/tags/{标签名}` ## 回滚操作等 - 回滚上一次提交以本次提交为准 `git commit --amend -m "以这次为准"` - 回滚2步 `git reset HEAD~2 --hard` - 放弃本地文件修改(未 add) `git checkout -- 文件名` - 放弃本地文件修改(已 add) ` git reset HEAD 文件名` 然后用上面命令,`git reset HEAD .`是放弃所有缓存 - 放弃本地文件修改(已 commit) ` git reset --hard HEAD^ `回退到上一次 commit 状态,可回退到任意版本 `git reset --hard commitid` - 已提交的文件在 `.gitignore` 中加入忽略后无效的问题 `git rm -r --cached .` ## 配置信息等 - 查看配置信息 ` git config --list` - 设置别名 ` git config --global alias.shu commit` 将 commit 命令设置成 shu - 存储密码 `git config --global credential.helper wincred` - git记住密码 `git config --global credential.helper store` - 清除用户名和密码 `git config --global credential.helper wincred` - 清除缓存在git中的用户名和密码 `git credential-manager uninstall` ## 找出大文件并删除 ### 查看仓库大小 `git count-objects -v` 显示如下:(size-pack 就是仓库大小,单位 KB) ``` count: 4169 size: 71823 in-pack: 31610 packs: 3 size-pack: 499556 prune-packable: 0 garbage: 0 size-garbage: 0 ``` 补充几个 - `du -sh .git` : 查看 `.git` 文件夹占用磁盘空间 - `du -d 1 -h` : 列出所有文件夹的大小 ### 1.找到大文件 `git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5` rev-list命令用来列出Git仓库中的提交,我们用它来列出所有提交中涉及的文件名及其ID。 该命令可以指定只显示某个引用(或分支)的上下游的提交。 | 参数 | 说明 | | ------------ | ------------ | | `verify-pack` | 用于显示已打包的内容 | | `.git/objects/pack/pack-*.idx` | 列出提交的pack中涉及的文件ID | | `sort -k 3` | 按照第三列进行从上到下排序 | ### 2.查找某个ID下的大文件内容 | 参数 | 说明 | | ------------ | ------------ | | rev-list |用来列出Git仓库中的提交,列出所有提交中涉及的文件名及其ID。| | -- objects |列出该提交涉及的所有文件ID。| | -- all |所有分支的提交,相当于指定了位于/refs下的所有引用。| `git rev-list --objects --all | grep e23872a5e7039c6aebe3e31239e16d534420934c` 显示如下: `e23872a5e7039c6aebe3e31239e16d534420934c public/alipay/app.asar` >说明:上面两步可以用一步来实现 `git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -20 | awk '{print$1}')"` ### 3.将该文件从历史记录中移除 ### 4.重写所有 commit,将该文件从 Git 历史中完全移除 将 3 和 4 合二为一: `git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch 你的文件名或者写个目录也可以' --prune-empty --tag-name-filter cat -- --all` 执行上述语句后,会有以下输出:  完成后显示如下:会展示删除了哪些文件  如果显示 `xxxxx unchanged`, 说明 `repo` 里没有找到该文件, 请检查路径和文件名是否正确,重复上面的脚本,把所有你想删除的文件都删掉。 ### 5.引用完全删除 到这里,历史记录中已经没有该文件了。不过运行 filter-branch 产生的日志还是会对该文件有引用,所以还需要运行以下几条命令,把该文件的引用完全删除: ``` rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --prune=now ``` ### 6.提交 删除之后,需要以强制覆盖的形式提交上去: `git push origin 你的分支名 --force` ## 配置多个 git 地址 ### 方法一:使用 `git remote add` 命令 - 查看当前远程仓库地址 `git remote` 或 `git remote -v` - 添加一个仓库地址 `git remote add shuxiaoyuan git@106.15.238.9:/home/git/laravel6.git`  - 配置文件内容  - 推送/拉取代码 ``` # 默认是 origin,当前分支 git push origin master <==等价于==> git push git pull origin master <==等价于==> git pull # 推送到指定分支 git pull shuxiaoyuan master git push shuxiaoyuan master ```  - 优点:可以对每一个仓库地址进行单独的推送和拉取 - 缺点:需要单独拉取每一个仓库地址,还可能需要解决冲突 ### 方法二:使用 git remote set-url 命令 - `git remote set-url --add origin git@106.15.238.9:/home/git/laravel6.git` - 优点:不需要单独对仓库地址进行 push ,一次 push 可以直接推送到两个分支 - 缺点:pull 的时候,只能从第一个仓库地址拉取代码 ### 方法三:修改配置文件 略 取消本地目录下关联的远程库:`git remote remove origin` 不管是哪种方式,都可以通过直接修改配置文件来实现  ## 本地跟踪所有分支 ``` # 查看本地分支 git branch # 在本地跟踪所有远程分支 git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done # 查看本地分支 ``` ## 推送/拉取所有分支 ``` # 方法一: git push --all origin git push # 方法二: git push --mirror ``` ## github.com 443 报错信息如下:`OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443` ### 方案一:搭梯子 略 ### 方案二:设置代理 看是否开启了代理,而 `git` 没有设置,如果是 `https` 和 `socks协议`,只需要替换成相应的 `https://` 和 `socks5://`即可 设置代理:`git config --global http.proxy 127.0.0.1:你的代理端口号` 取消代理:`git config --global --unset http.proxy` ### 方案三:修改DNS
内容版权声明:本文为舒孝元原创文章,转载无需和我联系,但请注明来自
舒孝元博客:https://www.shuxiaoyuan.com/info/41
联系邮箱:sxy@shuxiaoyuan.com