Git常用命令
GIt 命令繁多, 一不用就会忘光光,
初始化本地仓库
git init
克隆远程仓库
git clone 远程git仓库地址
配置本地用户名&邮箱
git config user.name ShiGuang
git config user.email ShiGuang@linghit.com
Note:
- 这个配置仅当前项目有效,且优先级高于全局配置
- 推荐使用本地配置,因为实际开发中可能存在多个项目并且账号不同的情况
配置全局用户名&邮箱
git config --global user.name ShiGuang
git config --global user.email ShiGuang@126.com
Note: 这个配置所有项目有效,且优先级低于本地配置
查看远程配置
git remote -v
添加远程仓库
git remote add 远程仓库别名 远程仓库地址
Note: 远程仓库名一般约定俗成叫origin
删除远程仓库
git remote remove 远程仓库名
添加至缓存区
git add .
查看状态
git status
提交至本地仓库
git commit -m "提交注释",用于提交缓存区中的文件
git commit -am "提交注释",用于提交已追踪的文件(包括缓存区中的)
git commit --amend -m "修改的提交注释",用户修改上一次提交的注释
推送至远程仓库
git push -u origin master,第一次加-u选项将当前分支与远程仓库分支进行映射
git push,之后可以省略远程仓库名和分支名了
git push --force,强制推送(不安全)
git push --force-with-lease,强制推送(安全,当本地版本和远程版本不一致时,推送不会成功)
拉取
git pull
git pull origin xxx
移出缓存区
git reset path/to/xxx.file,重置某个文件(以最后一次提交状态为准),保留文件
git reset,重置当前命令行工作目录下的所有文件(以最后一次提交状态为准),保留文件
回退至某个提交版本 ( 翻车就回滚 !!! )
git reset commitId,保留文件
git reset --hard commitId,不保留文件
git reset origin/master,回退到远程仓库origin的master分支,保留文件
git reset --hard origin/master,回退到远程仓库origin的master分支,不保留文件
撤销未添加至缓存区的更改
git checkout path/to/xxx.file,撤销单个文件
git checkout .,撤销当前命令行工作目录所有文件
Note: 不能撤回未追踪的文件,未追踪意思就是从来没有提交过的文件
使用 git rebase 解决分叉
场景1:本地与远端同一分支提交历史不一致
现有 2 - 5 个版本,同事A修改了一些文件,提交了一个 6 版本,而在 push 时,发现 push rejected 了,原因是同事B在此之前也提交了一个版本,并推送到远程仓库了,目前同事A的本地仓库已经落后远程仓库的版本了,需要先执行 git pull --rebase ,如果没冲突,就可以直接push了,如果有冲突,需要先解决完冲突,然后git add .,再执行git rebase --continue(之前的 rebase 其实只完成了一半,由于出现冲突而终止)即可。
场景2:不同分支之间的合并 (合并commit)
master 分支上现有 2 - 5 个版本,需求方临时要求开发一个新功能,故基于 master 新创建了一个分支 feature,新功能开发完后,提交版本 6,切换到 master 分支上,拉取最新的代码,合并 feature 分支,结果失败了,原因是 master 分支已经有别人提交了新的版本,并且和 feature 分支中的文件有冲突,这时候,打开冲突的文件,解决,然后 add、commit,再查看 log,发现分叉了,如果不想看到分叉,可以使用 git rebase,具体步骤如下:
git reset --hard head^,回退到上一个版本
git checkout feature,切换到 feature 分支
git rebase master,以 master 为基础,将 feature 分支上的修改增加到 master 分支上,并生成新的版本,这里还是会失败,因为还是会有冲突,需要找到冲突的文件,解决
git add .,添加到缓存区
git rebase --continue,继续完成之前的 rebase 操作,之前的 rebase 其实只完成了一半,由于出现冲突而终止,现在冲突解决,需要继续完成
git log --oneline --graph,再来查看历史,这时候就是一条完美的直线
git checkout master,切换到 master 分支
git merge freture,合并 feature 分支
git log --oneline --graph,再来查看历史,也是一条完美的直线,到此分叉问题已解决
查看分支
git branch,查看本地分支
git branch -a,查看所有分支,包括远程仓库
查看分支与远程分支的映射状态
git branch -vv
创建分支
git branch xxx
git checkout -b xxx,创建并切换
切换分支
git checkout xxx
合并分支
git merge xxx
删除分支
git branch -d xxx,普通删除
git branch -D xxx,强制删除
Node:
不能删除当前分支 未被合并的分支只能使用强制删除
查看日志
git log
git log --oneline,单行显示,信息简洁点
git log --graph,图形打印显示,可以显示分叉线路
git reflog,可以查看到已经被删除的 commit 记录
Note:
如果记录过多,可能屏幕显示不满,可以按上下方向键移动,或按q键退出 --oneline 和 --graph 可以一起使用 恢复误删的版本 比如提交了 1 - 5 个版本,不小心将 2 - 5 版本删除了,然后又提交了一个 6 版本,现在想要恢复被删除的 2 - 5 版本,用git reflog & git cherry-pick xxxxx,就可以轻松搞定
先使用 git reflog 查看被删除的版本id,然后使用 git reset --hard xxxx 回退到删除前的版本,那么就有 1 - 5 版本了,再使用 git cherry-pick xxxx 连接第 6 版本,那么就有最新的代码了
公钥私钥
ssh-keygen -t rsa -C ShiGuang@linghit.com,生成
ssh -T git@gitee.com,检查配对状态
多公钥私钥配置 有时候我们需要连接不同的远程仓库,这个时候你可能需要在自己的电脑中配置多个公钥私钥文件
生成公钥私钥文件
执行命令:ssh-keygen -t rsa -C your@email.com
不出意外,你会看到:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/GalaxySpeed/.ssh/id_rsa):
这时,你重新命名公钥私钥文件名,如输入:xxx_id_rsa,然后一路回车
不出意外,你会看到:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/GalaxySeed/.ssh/id_rsa): xxx_id_rsa(在这一步重命名)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in xxx_id_rsa.
Your public key has been saved in xxx_id_rsa.pub.
The key fingerprint is:
SHA256:cjF13HwtC7y5TE48eZZBKke22cqjhscVDBsnU6BO6rA your@email.com
The key's randomart image is:
+---[RSA 2048]----+
| B=*+. .|
| o %+== o|
| = o.B=.* |
| + o +Oo= |
| . o S === |
| + o o o+. |
| E . . = |
| o |
| |
+----[SHA256]-----+
并且,在用户根目录的.ssh文件夹下,会多出两个文件:
xxx_id_rsaxxx_id_rsa.pubOK!