常用的git命令

2022-06-06 15:46:19 浏览数 (2)

git是一种分布式版本管理工具,他有着强大的开源社区github,结合smartgit能够快速、高效、准确的对分支进行切换。 但是如果仅仅只是使用smartgit图形界面有时候也很不方便,至少在服务器上就没招了,因此了解一些git bash的基本命令是十分必要的。 接下来会介绍一些常用的基本的git bash命令。

配置git用户名和邮箱

代码语言:javascript复制
git config user.username "用户名" 
git config user.email "邮箱"

生成ssh-key

代码语言:javascript复制
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

参数详解:

代码语言:javascript复制
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型。

可以使用其默认的

代码语言:javascript复制
zsr :: ~ ‹master*› % ssh-keygen                                                                 
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): ~/.ssh/githubsshkey # 填写路径,可以指定文件名,可以缺省(缺省默认为 id_rsa)
Enter passphrase (empty for no passphrase): # 密码可为空
Enter same passphrase again: # 密码可为空
Your identification has been saved in ~/.ssh/githubsshkey.
Your public key has been saved in ~/.ssh/githubsshkey.pub.
The key fingerprint is:
SHA256:Va57YAfyxN86cD5a1ejR6imhQiJuM/2IeTyK5FI W 4 zsr@zsr.local
The key's randomart image is:
 ---[RSA 2048]---- 
|            .    |
|         . o     |
|        . = .    |
|         =   .   |
|        S *   = o|
|  . . . .. B.  o |
| o...  o  ..B.o  |
|.oo =o=.. . .  . |
| . =E=.o...  .o  |
 ----[SHA256]----- 

然后根据提示连续回车即可在~/.ssh 目录下得到githubsshkey 和githubsshkey.pub 其中githubsshkey.pub文件里面存放的就是我们要使用的public key。

生成多个ssh-key

要生成多个key重复上面操作即可,生成之后再.ssh目录下创建一个config文件,并配置私钥(没有.pub的那个文件)的相对路径

代码语言:javascript复制
Host github.com
User zhoushirong
IdentityFile ~/.ssh/githubsshkey

git 常用命令

代码语言:javascript复制
git clone git仓库地址 # 从git仓库拉取git代码到本地
git branch # 列出本地分支
git branch -r # 列出远程分支
git branch -a # 列出本地和远程分支
git branch 分支名 # 创建一个分支(*只是创建,不切换)
git branch -d | -D 分支名 # 删除本地分支
git branch -d | -D  -r 分支名 # 删除远程分支
git checkout 分支名 # 拉取远程分支

git commit && push

代码语言:javascript复制
git commit # 提交缓存区里面的文件
git commit -m "提交描述信息"
git push # 将本地仓库修改推送到服务器上的仓库
git push origin develop#— 将新分支push到远程分支
git push --set-upstream origin develop#— 将新分支push到远程分支并与之关联起来

git 合并a 分支到 b分支

step1:

代码语言:javascript复制
git checkout b

step2:

代码语言:javascript复制
git merge a

git查看log

step1:

代码语言:javascript复制
git log —— 按提交时间列出所有的更新
git log --pretty # pretty确定输出格式
git log --pretty=oneline # 日志简化版,只有commit message 和 hash
git log --pretty=oneline 文件名 # 显示某一个文件的git日志
git log -p -2 # -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新:

gitignore

有时候会遇到加入.gitignore文件的时候无效的问题,这个是因为某些文件已经被纳入了版本库

解决办法:

代码语言:javascript复制
git rm -r --cached .
git add .
git commit -m 'clean commit messages'
git push

git撤销修改

git有四个区:工作区(Working Area)、暂存区(Stage)、本地仓库(Local Repository)、远程仓库(Remote Repository) git有五种状态:未修改(Orgin)、已修改(Modified)、已暂存(Staged)、已提交(Committed)、已推送(Pushed)

1.已修改,未暂存

代码语言:javascript复制
git diff # 查看修改
git checkout . # 撤销所有修改(方法一)
git checkout -- xx.js # 撤销单个文件

2.已暂存

代码语言:javascript复制
git diff --cached #  查看修改

git reset # 把修改退回到git add .之前
git checkcout . # 撤回已修改,未缓存状态

git reset --hard # 等同于上面两个命令的组合

3.已提交,未推送

代码语言:javascript复制
git diff master orgin/master # 查看修改
git reset --hard orgin/master # 撤回修改(orgin/master代表远程仓库,相当于从远程仓库把代码取回来)
git reset xxid # 回滚到目标 commit

4.已推送的代码撤销

代码语言:javascript复制
git reset --hard HEAD^ # 恢复本地仓库
git push -f # 强制push到远程仓库

git push提示没有权限

代码语言:javascript复制
zsr@zsr:~/wywork/epay% git push
git@g.hz.netease.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

解决办法

代码语言:javascript复制
ssh-add -l
# Then, if you don't see your key listed, add it with:
ssh-add ~/.ssh/identity # 生成的私钥

提示DNS欺骗检测

代码语言:javascript复制
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for [g.hz.netease.com]:22222 has changed,
and the key for the corresponding IP address [59.111.178.110]:22222
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:iktCbxKzaP13xO9iY/5B9tkuIYE9BZfC31uW1Z6F4YQ.
Please contact your system administrator.
Add correct host key in ~/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in ~/.ssh/known_hosts:20
ECDSA host key for [g.hz.netease.com]:22222 has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.

出错原因:

代码语言:javascript复制
know_hosts 
# ssh登录的时候,当远程主机的公钥被接受以后,就会保存远程主机的公钥到此文件
# 出错的原因可能是公钥和对应的主机对应不上了。

解决办法

代码语言:javascript复制
# 删除~/.ssh/known_hosts里面对应的公钥条目、或者直接删除此文件
rm -rf ~/.ssh/known_hosts

VsCode git 实用插件

代码语言:javascript复制
gitLens

相关链接

https://git-scm.com/book/zh/v2

0 人点赞