2019-11-29-git-需要知道的1000个问题
title | author | date | CreateTime | categories |
---|---|---|---|---|
git 需要知道的1000个问题
|
lindexi
|
2019-11-29 8:36:7 +0800
|
2018-2-13 17:23:3 +0800
|
git
|
计算 git 的提交数
使用下面代码可以计算提交数
git rev-list --all --count
提交出现 TaskCanceledException
如果提交出现异常 Fatal: TaskCanceledException encountered
这是 git 的问题,尝试升级最新的 git 或输入git config --global credential.helper wincred
就可以让 git 记住密码
合并多个分支的时候不要自动合并
每次在合并 csproj 文件的时候自动合并都会让项目难以编译,如果需要让 git 合并多个分支的时候不要自动合并,发现有文件都有修改的时候就让开发自己解决,请使用下面的命令
git merge origin/xx --strategy=resolve
这里的命令的使用需要先使用 git fetch --all -p
让远程的分支最新,然后调用 merge 合并对应的分支
git fetch --all -p
git merge 仓库/分支名 --strategy=resolve
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 可以指定范围,下面的代码告诉大家如何使用
git cherry-pick 8793f59a87cbc4c62cf77b21369de657dc343a5d^...e50b523f12d34435b3b49fe229d76ecc4754687f //8793f59a87cbc4c62cf77b21369de657dc343a5d 提交 0 //e50b523f12d34435b3b49fe229d76ecc4754687f 提交 2 git cherry-pick 55b43be69fa90f4d03f27632c0231458ba1e7fd9...76a0298d38760a635f404c1660238ae852d96517 //55b43be69fa90f4d03f27632c0231458ba1e7fd9 错误的提交 //76a0298d38760a635f404c1660238ae852d96517 提交 4
可以看到第一个代码存在^
,因为pick的范围是(左开,右闭]
,所以为了包含 提交0 ,就需要在提交0添加^
。第二个提交从 55b43be69fa90f4d03f27632c0231458ba1e7fd9 错误的提交 开始,因为左开右闭,不会包含这个提交。
git 删除不需要的分支
git branch --merged | grep -v 'dev' | xargs -n 1 git branch -d
可以删除已经合并的分支
git 删除仓库的 tag
删除 origin 仓库的 tagname 可以使用下面代码
git push origin :tagname
也可以使用 --delete
删除
git push --delete origin tagname
删除本地 tag 可以使用
git tag --delete tagname
https://stackoverflow.com/a/5480292/6116637
git 取消暂存
如果错误 add 不想添加的文件,可以使用下面命令取消添加文件
git reset .
如果有 f1 f2 两个文件,错误把两个文件都使用 add 暂存,现在只需要添加 f1 那么可以使用下面代码
git reset f2
使用方法:
git reset 文件名
如果需要查看现在暂存的文件,可以使用下面代码
git status
git 寻找提交所在的分支
使用下面的代码可以找到提交所在的分支
git branch --contains <commit>
如果需要找到远程分支,加添加-r
,请看下面
git branch -r --contains <commit>
git worktree 添加已有分支的空间
使用下面代码可以使用已有分支添加空间
git worktree add <文件夹> 分支
或
git worktree add -b <新分支名> <新路径> <从此分支创建>
在 VisualStudio 添加 Blame
在 VisualStudio ,我看到了自带的 Blame 很烂,于是如何在 VisualStudio 添加一个强大的 Blame?
我选择了deepgit ,我把它安装在 C 盘,安装完成可以使用外部命令把他放在 VisualStudio,下面就是方法
确定 deepgit 的路径,记为 path ,我这里的是
C:\Program Files (x86)\DeepGit\bin\deepgit.exe
打开 VisualStudio 工具 外部工具
点击添加
输入标题,标题可以随意写。命令就是 path 安装路径,参数写
$(ItemPath)
- 点击添加或移除按钮 自定义
- 添加命令 这里选择工具的外部命令4,外部命令和添加命令所在有关,我这里添加的是第4个
git 列出所有的 subtree
请使用下面代码列出
git log | grep git-subtree-dir | tr -d ' ' | cut -d ":" -f2 | sort | uniq
git 推送 subtree
可以使用下面的代码推送
git subtree --prefix="路径" push origin dev
分离分支
git subtree split [--rejoin] --prefix=<本地子项目目录> --branch <主项目中作为放置子项目的分支名>
拉取项目
git subtree -P <本地子项目目录> pull <远程仓库> <远程分支>
需要知道 使用-P
和使用--prefix
是相同的,使用--branch
和使用-b
是相同的。
git tag 添加说明
如果对于一个分支的提交,需要添加tag而且给说明,如
v1.1 添加游戏
那么可以使用下面的命令
git tag v1.1 -m "添加游戏"
这样就会拿分支最后一次提交添加 tag 加上说明
git 指定文件夹
如果是在程序使用 git ,需要指定 git 的文件夹。
例如我在程序使用了 git add .
那么 git 怎么知道是添加哪个文件夹,如果没有告诉 git 就会添加程序运行的文件夹
例如添加 E:\林德熙\代码
文件夹,可以使用下面代码
git -C "/e/林德熙/代码" add .
使用 -C 文件夹路径
就可以让 git 添加指定的文件夹
创建本地仓库
如果需要创建本地仓库,只需要创建一个文件夹,然后在文件夹里使用下面代码
git init
这样就可以创建,但是现在创建的仓库无法被push代码,如果使用 push 到这个文件夹的代码,就会出现下面代码
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
解决方法是在刚才创建的本地仓库文件夹使用下面代码
git config --bool core.bare true
或者在创建文件夹之后,使用下面代码初始化
git init --bare
这时本地的文件夹是无法看到文件的,原来显示文件的 git checkout .
执行会显示下面代码
This operation must be run in a work tree
因为设置了bare
所以无法使用,如果要使用,就需要先去掉,使用下面代码
git config --unset core.bare
如果想要看到文件,需要执行下面两句代码
git config --unset core.bare
git checkout .
注意,设置了git config --unset core.bare
就无法再push任何东西,需要再设置git config --bool core.bare true
才可以
找到被删除的文件
从历史提交里面找到被删除的文件
git log --all --full-history -- <path-to-file>
文件支持通配如知道文件叫 xx.cs 可以使用下面的代码找到这个文件
git log --all --full-history -- **/xx.cs
https://stackoverflow.com/a/7203551/6116637
设置只对 github 开启代理
请将 socks5://127.0.0.1:1080 换你本地代理
git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
取消设置
git config --global --unset http.https://github.com.proxy
统计更改文件
统计被更改的文件可以使用下面代码
git status | grep 'modified:' | wc -l
在使用 git status
会显示版本里面被当前修改的文件,需要通过 git add 添加的文件有哪些是被修改,然后通过过滤修改统计修改的文件
如何删除错误提交的 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 上传当前分支
git 合并工具
参见:
2019-11-29-git-需要知道的1000个问题的更多相关文章
- 2019-9-2-git-需要知道的1000个问题
title author date CreateTime categories git 需要知道的1000个问题 lindexi 2019-09-02 10:12:31 +0800 2018-2-13 ...
- 2018-11-20-UWP-开发中,需要知道的1000个问题
title author date CreateTime categories UWP 开发中,需要知道的1000个问题 lindexi 2018-11-20 09:28:53 +0800 2018- ...
- 11个你应该知道的django博客引擎
这段时间一直在学python和django,准备写个小小的blog巩固下自己学到的东西,看到了GAE上的一些程序,大部分都是纯python的,想找一些基于django的,还真是难.无意中搜索到一篇文章 ...
- 2019.11.29 Mysql的数据操作
为名为name的表增加数据(插入所有字段) insert into name values(1,‘张三’,‘男’,20); 为名为name的表增加数据(插入部分字段) insert into name ...
- 2019.11.29 SAP SMTP郵件服務器配置 發送端 QQ郵箱
今天群裏的小夥伴問了如何配置郵件的問題,隨自己在sap裏面配置了一個 1. RZ10配置參數 a) 参数配置前,先导入激活版本 执行完毕后返回 b) 输入参数文件DEFAU ...
- pycharm+anaconda在Mac上的配置方法 2019.11.29
内心os: 听人说,写blog是加分项,那他就不是浪费时间的事儿了呗 毕竟自己菜还是留下来东西来自己欣赏吧 Mac小电脑上进行python数据开发环境的配置 首先下载Anaconda,一个超好用的数据 ...
- Supervision meeting notes 2019/11/29
topic 分支: 1. subgraph/subsequence mining Wang Jin, routine behavior/ motif. Philippe Fournier Viger ...
- EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)
传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...
- Git / 程序员需要知道的12个Git高级命令
众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...
随机推荐
- linux下快速查找文件(转载)
权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xxmonstor/article/deta ...
- MSO Transponder 页面开发思路
1. 确定Transponder开发页面分类,定义负责模块 2. 定义模块页面布局 3. 选择页面各数据对应的控件类型 4. 选定控件对应set/get所用方式 快捷键链接设置: http://www ...
- 【java多线程】volatile 关键字
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...
- TNS:could not resolve the connect identifier specified解决办法
添加环境变量解决:TNS_ADMIN ->> D:\OracleDB\product\11.2.0\dbhome_1\NETWORK\ADMIN
- C++面向对象实践
实践如下: class Person{ private: int age; ]; int hight; public: Person(int age, int hight, char* name); ...
- 代码实现:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
import java.util.ArrayList; import java.util.List; import java.util.Scanner; //有n个人围成一圈,顺序排号.从第一个人开始 ...
- 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_09.RequestMapping注解的属性
看下RequestMapping下面 一共有几个属性 那么属性用处不大 value和path互相为别名 这里用value表示path也是没有问题的 只有一个属性,并且属性名称叫做value那么就可以省 ...
- 阶段3 2.Spring_07.银行转账案例_6 测试转账并分析案例中的问题
转账回滚这里把异常打印出来.AccountServiceTest.java 把数据库的金额现在都改成1000块 运行测试方法 这里已经报错了. 刷新数据库内的数据.这样我们事物就控制成功了. 事物控制 ...
- mybatis 动态SQL .2
目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when,otherwise) 语句 5.动态SQL:tri ...
- Arouter核心思路和源码
前言 阅读本文之前,建议读者: 对Arouter的使用有一定的了解. 对Apt技术有所了解. Arouter是一款Alibaba出品的优秀的路由框架,本文不对其进行全面的分析,只对其最重要的功能进行源 ...