Git常用命令
初始化本地仓库
git init
配置本地用户名&邮箱
git config user.name andremao
git config user.email andremao@126.com
Note:
- 这个配置仅当前项目有效,且优先级高于全局配置
- 推荐使用本地配置,因为实际开发中可能存在多个项目并且账号不同的情况
配置全局用户名&邮箱
git config --global user.name andremao
git config --global user.email andremao@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:不同分支之间的合并
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 tag
,查看标签列表
git tag name
,创建标签
git tag name xxxx
,指定版本id创建标签
git tag -a name -m "comment"
,指定提交信息创建标签
git tag -d name
,删除标签,git push origin :name
,同步删除远程仓库的标签
git push origin --delete tag name
,同时删除本地和远程的标签
git push origin name
,推送标签至远程仓库
git push origin --tags
,一次性推送全部尚未推送到远程的本地标签
工作树
假设有个本地仓库目录:fe35,命令行所在目录也在:fe35
git worktree add ../fe35-wts/fe35-master master
,添加一个工作树,会单纯的将master分支的代码检出到../fe35-wts/fe35-master
文件夹中,然后就可以用VSCode新开个窗口打开这个文件夹进行开发,不影响其他分支
git worktree add ../fe35_wt_node_master -b node_master master
,添加一个工作树,基于master创建一个新分支node_master,并作为工作树分支
git worktree list
,查看工作树列表
git worktree prune
,修剪工作树,可以将工作树文件夹直接删掉后再执行该命令,就可以同步git worktree list
信息
查看日志
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 andremao@126.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/andremao/.ssh/id_rsa):
这时,你重新命名公钥私钥文件名,如输入:xxx_id_rsa
,然后一路回车
不出意外,你会看到:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/andremao/.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_rsa
xxx_id_rsa.pub
配置
使用sudo ssh-add ~/.ssh/github_rsa
(推荐)
or
在用户根目录的.ssh
文件夹下,添加一个config
文件
编辑config
文件,如下:
# xxx
Host your.remote.host.com
HostName your.remote.host.com
IdentityFile ~/.ssh/xxx_id_rsa
# gitee
Host gitee.com
HostName gitee.com
IdentityFile ~/.ssh/gitee_id_rsa
# 配置文件参数
# Host Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
# HostName 要登录主机的主机名
# IdentityFile 对应的私钥文件