前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >git 需要知道的1000个问题

git 需要知道的1000个问题

作者头像
林德熙
发布2018-09-19 10:49:44
7170
发布2018-09-19 10:49:44
举报
文章被收录于专栏:林德熙的博客

计算 git 的提交数

使用下面代码可以计算提交数

代码语言:javascript
复制
git rev-list --all --count

提交出现 TaskCanceledException

如果提交出现异常 Fatal: TaskCanceledException encountered

这是 git 的问题,尝试升级最新的 git 或输入git config --global credential.helper wincred 就可以让 git 记住密码

Cherry-pick 多个提交

如果多个提交是连续的,那么可以使用下面的方法git cherry-pick 开始...结束

例如有提交

76a0298d38760a635f404c1660238ae852d96517 提交 4

55b43be69fa90f4d03f27632c0231458ba1e7fd9 提交 3

55b43be69fa90f4d03f27632c0231458ba1e7fd9 错误的提交

e50b523f12d34435b3b49fe229d76ecc4754687f 提交 2

322d49c166b0a48bdcc6c1f69b29c617b435850b 提交 1

8793f59a87cbc4c62cf77b21369de657dc343a5d 提交 0

需要挑拣出 提交0-4 那么一般的方法是使用 git cherry-pick 5次。但是有一个简单的方法,只需要pick两次

git 的 pick 可以指定范围,下面的代码告诉大家如何使用

代码语言:javascript
复制
git cherry-pick 8793f59a87cbc4c62cf77b21369de657dc343a5d^...e50b523f12d34435b3b49fe229d76ecc4754687f

//8793f59a87cbc4c62cf77b21369de657dc343a5d 提交 0 

//e50b523f12d34435b3b49fe229d76ecc4754687f 提交 2

git cherry-pick 55b43be69fa90f4d03f27632c0231458ba1e7fd9...76a0298d38760a635f404c1660238ae852d96517

//55b43be69fa90f4d03f27632c0231458ba1e7fd9 错误的提交

//76a0298d38760a635f404c1660238ae852d96517 提交 4

可以看到第一个代码存在^,因为pick的范围是(左开,右闭],所以为了包含 提交0 ,就需要在提交0添加^。第二个提交从 55b43be69fa90f4d03f27632c0231458ba1e7fd9 错误的提交 开始,因为左开右闭,不会包含这个提交。

git 删除不需要的分支

代码语言:javascript
复制
git branch --merged | grep -v 'dev' | xargs -n 1 git branch -d

可以删除已经合并的分支

git 取消暂存

如果错误 add 不想添加的文件,可以使用下面命令取消添加文件

代码语言:javascript
复制
git reset .

如果有 f1 f2 两个文件,错误把两个文件都使用 add 暂存,现在只需要添加 f1 那么可以使用下面代码

代码语言:javascript
复制
git reset f2

使用方法:

代码语言:javascript
复制
git reset 文件名

如果需要查看现在暂存的文件,可以使用下面代码

代码语言:javascript
复制
git status

git 寻找提交所在的分支

使用下面的代码可以找到提交所在的分支

代码语言:javascript
复制
git branch --contains <commit>

如果需要找到远程分支,加添加-r,请看下面

代码语言:javascript
复制
git branch -r --contains <commit>

git worktree 添加已有分支的空间

使用下面代码可以使用已有分支添加空间

代码语言:javascript
复制
git worktree add <文件夹> 分支

在 VisualStudio 添加 Blame

在 VisualStudio ,我看到了自带的 Blame 很烂,于是如何在 VisualStudio 添加一个强大的 Blame?

我选择了deepgit ,我把它安装在 C 盘,安装完成可以使用外部命令把他放在 VisualStudio,下面就是方法

  1. 确定 deepgit 的路径,记为 path ,我这里的是C:\Program Files (x86)\DeepGit\bin\deepgit.exe
  2. 打开 VisualStudio 工具 外部工具
  3. 点击添加
  4. 输入标题,标题可以随意写。命令就是 path 安装路径,参数写$(ItemPath)
  1. 点击添加或移除按钮 自定义
  1. 添加命令 这里选择工具的外部命令4,外部命令和添加命令所在有关,我这里添加的是第4个

git 列出所有的 subtree

请使用下面代码列出

代码语言:javascript
复制
git log | grep git-subtree-dir | tr -d ' ' | cut -d ":" -f2 | sort | uniq

git 推送 subtree

可以使用下面的代码推送

代码语言:javascript
复制
git subtree --prefix="路径" push origin dev 

分离分支

代码语言:javascript
复制
git subtree split [--rejoin] --prefix=<本地子项目目录> --branch <主项目中作为放置子项目的分支名>

拉取项目

代码语言:javascript
复制
git subtree -P <本地子项目目录> pull <远程仓库> <远程分支>

需要知道 使用-P和使用--prefix是相同的,使用--branch和使用-b是相同的。

git tag 添加说明

如果对于一个分支的提交,需要添加tag而且给说明,如

代码语言:javascript
复制
v1.1 添加游戏

那么可以使用下面的命令

代码语言:javascript
复制
git tag v1.1 -m "添加游戏"

这样就会拿分支最后一次提交添加 tag 加上说明

git 指定文件夹

如果是在程序使用 git ,需要指定 git 的文件夹。

例如我在程序使用了 git add . 那么 git 怎么知道是添加哪个文件夹,如果没有告诉 git 就会添加程序运行的文件夹

例如添加 E:\林德熙\代码 文件夹,可以使用下面代码

代码语言:javascript
复制
 git -C "/e/林德熙/代码" add .

使用 -C 文件夹路径 就可以让 git 添加指定的文件夹

创建本地仓库

如果需要创建本地仓库,只需要创建一个文件夹,然后在文件夹里使用下面代码

代码语言:javascript
复制
git init

这样就可以创建,但是现在创建的仓库无法被push代码,如果使用 push 到这个文件夹的代码,就会出现下面代码

代码语言:javascript
复制
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: is denied, because it will make the index and work tree inconsistent

解决方法是在刚才创建的本地仓库文件夹使用下面代码

代码语言:javascript
复制
git config --bool core.bare true

或者在创建文件夹之后,使用下面代码初始化

代码语言:javascript
复制
git init --bare

这时本地的文件夹是无法看到文件的,原来显示文件的 git checkout . 执行会显示下面代码

代码语言:javascript
复制
This operation must be run in a work tree

因为设置了bare所以无法使用,如果要使用,就需要先去掉,使用下面代码

代码语言:javascript
复制
git config --unset core.bare

如果想要看到文件,需要执行下面两句代码

代码语言:javascript
复制
git config --unset core.bare
git checkout .

注意,设置了git config --unset core.bare就无法再push任何东西,需要再设置git config --bool core.bare true才可以

如何删除错误提交的 git 大文件

git无法pull仓库refusing to merge unrelated histories

git subtree pull 错误 Working tree has modifications

git 提交添加 emoij 文字

git cannot lock ref

git 修改commit日期为之前的日期

git镜像仓库

git 合并两个仓库

git 分支改名

git push 错误 hook declined

git 上传当前分支


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 计算 git 的提交数
  • 提交出现 TaskCanceledException
  • Cherry-pick 多个提交
  • git 删除不需要的分支
  • git 取消暂存
  • git 寻找提交所在的分支
  • git worktree 添加已有分支的空间
  • 在 VisualStudio 添加 Blame
  • git 列出所有的 subtree
  • git 推送 subtree
  • git tag 添加说明
  • git 指定文件夹
  • 创建本地仓库
  • 如何删除错误提交的 git 大文件
  • git无法pull仓库refusing to merge unrelated histories
  • git subtree pull 错误 Working tree has modifications
  • git 提交添加 emoij 文字
  • git cannot lock ref
  • git 修改commit日期为之前的日期
  • git镜像仓库
  • git 合并两个仓库
  • git 分支改名
  • git push 错误 hook declined
  • git 上传当前分支
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档