Git命令


一、Git相关问题积累

1、git for windows下的Filename too long

【问题描述】
clone git上的代码时,报错error: unable to create file tags/XXX.class: Filename too long
在这里插入图片描述

【问题原因】
git clone代码时提示Filename too long,一般是在windows下出现的问题。git可以创建4096长度的文件名,然而在windows最多是260。
【解决方案】

git config –global core.longpaths true

–global或者system是该参数的使用范围,只想对本版本库设置该参数,上述命令中去掉–global或system。

1、删除本地分支和远程分支

--查看本地分支
git branch 
--删除本地分支tmp
1. git checkout dev 删除分支前先切换到其他分支
2. git branch -D tmp

--删除远程分支
--查看远程分支
git branch -r
--删除远程分支tmp
git push origin --delete tmp

2、创建分支

新建一个分支并同时切换到那个分支上,你可以运行一个带有 -b 参数的 git checkout 命令:

git checkout -b iss53
Switched to a new branch "iss53"

它是下面两条命令的简写:

 git branch iss53
 git checkout iss53

3、Git 用户信息配置

设置全局用户名和邮箱

git config --global user.name “xxx”
git config --global user.email “xxx@xxx.com”

4、Git本机创建多个账户

1、生成并部署SSH Key

ssh-keygen -t rsa -C “user1@email.com”

在当前用户的.ssh目录下(C:\Users\xxx.ssh)会生成id_rsa私钥文件和id_rsa.pub公钥文件,将id_rsa.pub中的内容添加至user1的github中。然后在git bash中输入以下命令测试该用户的SSH密钥是否生效:

ssh -T git@github.com

扩展内容

ssh-keygen -t rsa -C user.email
-t rsa:-t即指定密钥的类型,密钥的类型有两种,一种是RSA,一种是DSA
-C:-C表示要提供一个新注释,用于识别这个密钥

2、生成user2的密钥,注意不能再使用默认的文件名id_rsa,否则会覆盖之前密钥文件

ssh-keygen -t rsa -f ~/.ssh/id_rsa_2 -C “user2@email.com”

3、将对应公钥配置到github服务器上
GitHub添加SSH key的方式如下图所示:
在这里插入图片描述

4、配置config文件(最核心的地方)
在.ssh目录下创建一个没有后缀config文本文件,每个账号配置一个Host节点。主要配置项说明
若为多个 github 账号 上面配置可以改成:

# 配置user1 
Host github.com			#服务器别名
	HostName github.com 填账户的github网址
	User user1 //用户名
	IdentityFile C:\\Users\\XXX\\.ssh\\id_rsa //密钥文件的路径
# 配置user2
Host user2.github.com	#服务器别名
	HostName github.com	#主机地址
	User use2	#可以写邮箱名称,也可以写 git 账号
	IdentityFile C:\\Users\\XXX\\.ssh\\id_rsa_2	#对应github 密钥路径,注意不要写错

配置项解释:

每个账号单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性即可
Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:
Host usergithub 这样定义的话,命令如下,即git@后面紧跟的名字改为usergithub
git clone git@usergithub:spring/springcloud

HostName           //这个是真实的域名地址
IdentityFile         // 这里是id_rsa的地址
PreferredAuthentications   //配置登录时用什么权限认证--可设为publickey,password,publickey,keyboard-interactive等
IdentitiesOnly yes         //配置yes,表示只使用这里的key,防止使用默认的(可忽略)
User            // 配置使用用户名

测试工作

ssh -T git@github.com
ssh -T git@user2.github.com

如果测试联通,会返回ok字眼
在这里插入图片描述
5、使用
以github上这个SSH为例,“git@github.com:spring/springcloud””,改成上面格式
例如 clone 时:

若需要 user1,配置是默认,账号操作:“git@github.com:spring/springcloud”
若需要 user2,特殊配置,账号操作:“git@user2.github.com:spring/springcloud”

6、配置用户名及邮箱
清除原有全局设置

该步骤非必须的,如果你没有设置过全局用户名、email 等信息,则不用清除原有设置
git config --global --unset user.name 取消全局设置
git config --global --unset user.email 取消全局设置

局部配置用户名、email(在下载的项目根目录执行)

git config --local user.name “newname”
git config --local user.email “newemail”

注:配置加载的优先策略为先执行局部配置读取,再进行全局配置读取

5、git add暂存命令

新建一个readme.md文件,内容随意,用命令git add告诉Git,把文件添加到仓库:
git add 文件名 添加单独某一个文件到仓库

git add readme.md

git add . 添加所有修改的文件

git add .

执行上面的命令,没有任何显示,说明添加成功。

6、撤销本地commit

在这里插入图片描述

第一步:先看日志

命令:git log --pretty=oneline> git log

命令拓展:
git log --pretty=oneline
git log --pretty=short
git log --pretty=full
git log --pretty=fuller

还可以定制行数:git log --pretty=oneline -4git log --pretty=oneline -4

第二步:撤销

如果执行了 git commit -m "…"需要撤销,则可以使用以下命令:

git reset --soft HEAD~1
git reset --soft 撤回指定版本号

想撤销两次commit,可以写成

git reset --soft HEAD~2

参数 --mixed --soft --hard
git reset HEAD~1 等同于 git reset --mixed HEAD~1

–mixed:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作,默认使用 --mixed 参数
–soft: 不删除工作空间改动代码,撤销commit,不撤销git add .
–hard: 删除工作空间改动代码,撤销commit,撤销git add . (删除本地已修改的代码,恢复到上一个commit)

案例 --soft

git reset --soft HEAD~1或者 撤回指定版本号

初始状态,可见当前分支最后一个提交是debug the initialization page
在这里插入图片描述现在要撤销该commit,但是又不能撤销该提交包含的更改,使用git reset --soft,执行结果为
在这里插入图片描述在这里插入图片描述
可见commit取消了,代码更改并没有取消。

案例 --hard

git reset --hard HEAD~1或者 撤回指定版本号

使用git log命令查看本地的所有提在这里插入图片描述
现在想要撤销最后一次提交,即上图中“OTMS-25838: rollback the modification in OrderDto”这个commit;
在这里插入图片描述使用命令git reset --hard 1c38838ad39b396e271cb10e2146a1d673b4a2b9撤回制定版本号(不包括该提交)之前的所有提交。

注意:上述命令执行成功之后,会彻底返回到回退前的版本状态,新发生的变更将会丢失。对于部分发生了变更,但是变更部分的文件夹存在未提交的文件可能导致目录非空而删除失败,此时需要自行处置

注释写错了,使用以下命令修改

git commit --amend

会打开vim编辑刚才的提交的注释

7、Git创建本地分支-push到远程并建立远程分支

主要命令 git push -u origin </分支名>
查看本地分支

Davids-MacBook-Pro-2015:root macbook$ git branch
  master
* pingan_payment

查看所有分支:本地和远程分支

Davids-MacBook-Pro-2015:root macbook$ git branch -a
  master
  * pingan_payment

  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/pingan_payment
Davids-MacBook-Pro-2015:root macbook$ 

创建本地分支

Davids-MacBook-Pro-2015:root macbook$ git branch -c cpcn-payment
Davids-MacBook-Pro-2015:root macbook$ git status

将本地分支push到远程,并建立远程分支

Davids-MacBook-Pro-2015:root macbook$ git push -u origin cpcn-payment
Enumerating objects: 1860, done.
Counting objects: 100% (1860/1860), done.
Delta compression using up to 8 threads
Compressing objects: 100% (581/581), done.
Writing objects: 100% (1774/1774), 260.10 KiB | 18.58 MiB/s, done.
Total 1774 (delta 952), reused 1639 (delta 843)
remote: Resolving deltas: 100% (952/952), completed with 62 local objects.
remote: Powered by GITEE.COM [GNK-5.0]
remote: Create a pull request for 'cpcn-payment' on Gitee by visiting:
remote:     https://gitee.com/bei***_h***/h***bus/pull/new/bei***_h***:cpcn-payment...beijing_haiyin:master
To https://gitee.com/bei***_h***/h***bus.git
 * [new branch]        cpcn-payment -> cpcn-payment
Branch 'cpcn-payment' set up to track remote branch 'cpcn-payment' from 'origin'.
Davids-MacBook-Pro-2015:root macbook$ 

查看所有分支

Davids-MacBook-Pro-2015:root macbook$ git branch -a
* cpcn-payment
  master
  pingan_payment
  remotes/origin/HEAD -> origin/master
  remotes/origin/cpcn-payment
  remotes/origin/master
  remotes/origin/pingan_payment
Davids-MacBook-Pro-2015:root macbook$ 

8、git cherry-pick

对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。
这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。

图解示例
如下有两个分支master和dev,从C2开始两个分支开始有不同的commits。
在这里插入图片描述
需要把dev的C6合并到master,只需在master分支上执行git cherry-pick C6,就会把dev分支的C6应用到master分支上并产生一个新的commitC6’。
在这里插入图片描述
如果要合并多个commits,比如C7和C8两个commits,可以执行git cherry-pick C7 C8,则git提交记录就会变成下面这样。
在这里插入图片描述
需要注意的是,新的commit SHA-1 校验和会和原来的commit SHA-1 校验和不一样。
比如我现在有个文件a.b.c,我在develop分支完成了三个功能模块:feature A,feature B,feature C。如下图:
在这里插入图片描述
现在只要feature A,feature B,我们现在用cherry-pick命令直接把feature A,feature B的提交合并到master分支里,如下操作:
在这里插入图片描述
可以看到,功能模块feature A,feature B已经被合并到master分支里。请注意,合并到master分支里的提交哈希值发生了改变,与原来的不同。

可以看出,cherry-pick命令使用方法很简单,即:

git cherry-pick commitID

刚刚是一个个提交cherry-pick到master分支,但如果有100个commit要合并到master分支呢?总不能这样一个个操作吧?git一样帮你想到了,它提供了一个区间操作方法。具体来讲是这样的:

git cherry-pick commit1…commit100

但是要注意,这是一个左开右闭的操作,也就是说,commit1不会被合并到master分支,而commit100则会。这样的话上面的需求可以如下操作来实现:
在这里插入图片描述
注意:上面讲到cherry-pick命令每拣选一个commit就会提交一次生成一个新的commit id。 如果我们想让每个commit 拣选后暂缓提交,等到所有commit都拣选完成后,自己手动commit,应该怎么办呢?答案是用-n 选项:
在这里插入图片描述

9、Git撤销&回滚操作

git的工作流

工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。
暂存区:已经 git add xxx 进去,且未 git commit xxx 的。
本地分支:已经git commit -m xxx 提交到本地分支的
在这里插入图片描述

10.git rabase

git rebase 多条合为一条

git rebase 合并分支1
git rebase 合并分支2
git rebase 合并分支3

11.GitKraken – 超好用的 Git 可视化工具

GitKraken – 超好用的 Git 可视化工具

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值