Git的使用
# Git 的使用
# 初始化
# cd 到文件夹中
git init
2
# 基本使用
Git
设置
用户提交时,会被提交的信息
git config --global user.name "au"
:设置提交代码时的用户名git config --global user.email au@163.com
:设置提交代码时的用户邮箱
分支操作
查看当前分支及分支切换
git branch
:查看本地分支,分支前带有*
号的时当前所在分支git branch [name]
:已当前分支为基准创建名字为[name]
的新分支,创建完成后,默认分支切换到[name]
分支,
例如:git branch dev
:创建dev
分支git branch -d [name]
:删除[name]
分支,
例如:git branck -d dev
, 删除dev
分支,如果删除失败,一般是需要切换到其它分支,再删除需要删除的分支git checkout [name]
:分支切换到name
分支,
例如:git checkout dev
,切换到dev
分支
代码提交
git add .
:将文件提交到暂存区,.
代表全部文件(除了.gitignore
忽略的文件)git commit -m 'xxxx'
:将暂存区的文件提交到分支,xxx
是提交信息git status
:查看工作区和暂存区的状态(工作区就是你屏幕上能看到的文件,暂存区就是被git
暂时管理的那部分状态文件)git log
: 查看提交记录,按回车加载下一条记录,输入q
退出查看git push origin master
:将本地master
分支 推送到 远程(origin
)master
分支,原本写法是git push origin master:master
(git push <远程主机名> <本地分支名>:<远程分支名>
)
拉取代码
第一次克隆项目,以及在远程代码更新后,更新代码到本地(提交代码前如有变动执行 git pull )
git clone <repo>
:克隆仓库到本地,
例如:git clone git@github.com:coderlyu/vite-frontend-template.git
git pull
:拉取代码
文件暂存
常用在当前分支开发未完成,要切换到别的分支修复 bug 时
git stash
:暂存(存储在本地,并将项目本次操作还原)git stash pop
:使用上一次暂存,并将这个暂存删除,使用该命令后,如果有冲突,终端会显示git stash list
:查看所有的暂存git stash clear
:清空所有的暂存git stash drop [<stash>]
:删除某一个暂存,在中括号里面放置需要删除的暂存 ID
标签操作
常用来对某个已发布的版本进行打标签
git tag
或git tag -l
:查看本地分支标签git tag [标签名]
:给当前分支打标签,
例如:git tag v1.0.0
,给当前分支打上v1.0.0
标签git tag --delete [标签名]
:删除本地某个标签,
例如:git tag --delete v1.0.0
, 删除v1.0.0
这个标签
# 高级用法
# 关联远程库
git remote -v
:查看已关联的远程库git remote show [remote]
:显示某个远程仓库的信息git remote add [shortname] [url]
:添加远程版本库,
例如:git remote add origin git@github.com:coderlyu/vite-frontend-template.git
,添加一个名字为:origin
,地址为:git@github.com:coderlyu/vite-frontend-template.git
的远程库git remote rm [name]
: 删除关联名字为[name]
的远程库
# 强制覆盖远程库
git push origin master[:master] --force
: 本地master
分支强制覆盖 远程master
分支,
例如:git push origin master --force
# 版本回退
# 1. git reset
作用是修改 HEAD
的位置,即将 HEAD
指向的位置改变为之前存在的某个版本,reset
之后,目标版本之后的版本不见了
例如:
git reset --hard [hash]
:回退到[hash]
之前的版本,hash
为提交记录的哈希值(一般取前四位),
例如:git reset --hard 5d50
,回退到提交记录哈希值为5d50
前版本
reset
成功后一般需要将当前更改强制覆盖远程, git push -f origin master
,此时因为远程分支和本地分支不在同一个版本,需要将远程的覆盖,所以加上 -f
(--force
的简写)
# 2. git revert
用于“反做”某一个版本,以达到撤销该版本的修改的目的,所有提交记录都可以看到,不会像 reset
一样把后面的提交信息删除
例如:如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法
git revert -n [hash]
:不需要[hash]
这次提交的操作
例如:git revert -n 5d50
,表示不需要提交记录哈希值为5d50
这次的操作,同时5d50
这条记录还在,只是不需要这次提交做的更改
revert
成功后一般也需要将当前更改强制覆盖远程, git push -f origin master
,此时因为远程分支和本地分支不在同一个版本,需要将远程的覆盖,所以加上 -f
(--force
的简写)
# merge 和 rebase
- merge
需要合并的两个分支,会形成一个新的 commit 提交(比如:Merge branch 'dev'
的提交记录)
如果在可视化界面上查看的话,可以看到合并的分支和被合并的分支有交集
从分支 dev
合并到分支 master
git checkout master
,切换到master
分支(该分支是你合并的分支或者说保存的分支)git merge dev
,dev
分支合并到master
分支,一般来说合并完成后,dev
分支可以被删除,同时如果有新的开发需求,继续从master
分支创建新的分支开发
- rebase
需要合并的两个分支, 不会形成一个新的 commit 提交
如果在可视化界面上查看的话,合并和被合并的分支是在一条线上
从分支 dev
合并到分支 master
git checkout master
,切换到master
分支(该分支是你合并的分支或者说保存的分支)git rebase dev
,dev
分支合并到master
分支
# 配置 Git ssh
使用 https 克隆每次 fetch 和 push 代码都需要输入账号和密码;ssh 默认是每次 fetch 和 push 代码都不需要输入账号和密码
设置
user.name
和user.email
检查是否已经存在
ssh
- mac:
cd ./.shh
ls
- 查看是否有
id_isa
和id_isa.pub
- windows:
cd ./.shh
dir
- 查看是否有
id_isa
和id_isa.pub
- mac:
生成密钥
ssh-keygen -t rsa -C "au@163.com"
:"au@163.com" 是你自己的邮箱- 如果不需要加密码的话,连续 3 个回车,就能得到
id_rsa
和id_rsa.pub
文件
添加密钥到
ssh-agent
确保 ssh-agent 是可用的
ssh-add ~/.ssh/id_rsa
,添加生成的 SSH key 到 ssh-agent
登陆 Github, 添加 ssh
点击右上角头像 -> Settings -> SSH and GPG Keys
将刚才生成的 id_rsa.pub 里面的内容拷贝到这里,新增一个 New SSH key
# 常见问题
# git clone xxx 项目克隆下来之后 使用 git remote -v 查看 没有远程库的地址
GitHub
未添加当前电脑的 ssh
,登陆Github
, 添加 ssh
即可
# git pull 出错
可能的原因有:
- 存在冲突,需要你手动去解决冲突的问题