初始化本地仓库
git init
配置本地用户名&邮箱
git config user.name emailName
git config user.email emailName@163.com
注意:
- 这个配置仅当前项目有效,且优先级高于全局配置
- 推荐使用本地配置,因为实际开发中可能存在多个项目并且账号不同的情况
配置全局用户名&邮箱
git config --global user.name emailName
git config --global user.email emailName@163.com
注意: 这个配置所有项目有效,且优先级低于本地配置
查看远程配置
git remote -v
添加远程仓库
git remote add 远程仓库别名 远程仓库地址
注意: 远程仓库名一般约定俗成叫origin
删除远程仓库
git remote remove 远程仓库名
添加至缓存区
git add .
查看状态
git status
提交至本地仓库
git commit -m "提交注释",用于提交缓存区中的文件
git commit --no-verify -m '提交注释' 忽略eslint校验强行提交
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 .,撤销当前命令行工作目录所有文件
注意: 不能撤回未追踪的文件,未追踪意思就是从来没有提交过的文件
使用 git rebase 解决分叉
场景1:本地与远端同一分支提交历史不一致
现有 v2 - 5 个版本,同事A修改了一些文件,提交了一个 6 版本,而在 push 时,发现 push rejected 了,原因是同事B在此之前也提交了一个版本,并推送到远程仓库了,目前同事A的本地仓库已经落后远程仓库的版本了,需要先执行 git pull --rebase ,如果没冲突,就可以直接push了,如果有冲突,需要先解决完冲突,然后git add .,再执行git rebase --continue(之前的 rebase 其实只完成了一半,由于出现冲突而终止)即可。
场景2:不同分支之间的合并
master 分支上现有 v2 - 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,强制删除
注意:
- 不能删除当前分支
- 未被合并的分支只能使用强制删除
标签管理
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,一次性推送全部尚未推送到远程的本地标签
查看日志
git log
git log --oneline,单行显示,信息简洁点
git log --graph,图形打印显示,可以显示分叉线路
git reflog,可以查看到已经被删除的 commit 记录
注意:
- 如果记录过多,可能屏幕显示不满,可以按上下方向键移动,或按
q键退出 --oneline和--graph可以一起使用
恢复误删的版本
比如提交了 v1 - 5 个版本,不小心将 v2 - 5 版本删除了,然后又提交了一个 6 版本,现在想要恢复被删除的 v2 - 5 版本,用git reflog & git cherry-pick xxxxx,就可以轻松搞定
先使用 git reflog 查看被删除的版本id,然后使用 git reset --hard xxxx 回退到删除前的版本,那么就有 v1 - 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_rsaxxx_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 对应的私钥文件
分支操作常用命令
-
git branch ——列出所有本地分支
-
git branch -r ——列出所有远程分支
-
git branch -a ——列出所有本地分支和远程分支
-
git branch [branch-name] ——新建一个分支,但依然停留在当前分支
-
git checkout -b [branch] ——新建一个分支,并切换到该分支
-
git branch --track [branch] [remote-branch] ——新建一个分支,与指定的远程分支建立追踪关系
-
git checkout [branch-name] ——切换到指定分支,并更新工作区
-
git checkout - ——切换到上一个分支
-
git merge [branch] ——合并指定分支到当前分支
-
git branch -d [branch-name] ——删除分支
-
删除远程分支
- git push origin --delete [branch-name]
- git branch -dr [remote/branch]
-
git fetch —— 拉取所有分支代码
常用命令
-
git init ——初始化
-
git status ——检查代码状态
-
git add 文件名(git add .) —— 提交至暂存区
-
git commit -m'提示信息' ——提交至git仓库(git commit -am'')
-
git push -u origin 分支名——提交至远程仓库(git push)
- origin——地址的变量
- master——主分支
- -U ——记录地址和分支
-
git pull origin master——获取最新代码(git pull)
-
git clone 地址 ——克隆
-
git branch——查看分支
-
git branch 分支名—— 创建分支
-
git checkout 分支名——切换分支
-
git checkout -b 分支名——切换、创建
-
git merga 分支名—— 合并分支
-
git branch -d 分支名——删除本地分支
-
git push origin --delete 分支名——删除远程分支
-
git log——查看当前及之前的版本
-
git reflog ——查看所有版本信息
-
git reset --hard 版本id ——回滚版本
-
git reset HEAD 文件名——暂存区撤回至工作区(绿--->红)
-
git reset HEAD .
-
git checkout 文件名——从git仓库中覆盖工作区 (红--->绿)
-
git checkout .
-
.gitignore ——忽略(白名单)
-
git rm -f 文件名 —— 从 Git仓库和工作区中同时移除 index.js 文件
-
git rm --cached index.css—— 只从 Git 仓库中移除 index.css,但保留工作区中
- git log 查看提交历史记录
- git log --oneline 或者 git log --pretty=oneline 以精简模式显示
- git log --graph 以图形模式显示
- git log --stat 显示文件更改列表
- git log --author= 'name' 显示某个作者的日志
- git log -p filepath 查看某个文件的详细修改
- git log -L start,end:filepath 查看某个文件某几行范围内的修改记录
- git log --stat commitId 或者 git show --stat commitId 查看某一次提交的文件修改列表
git remote -v #查看本地仓库的远程仓库地址映射