git 基本组成框架:Workspace、Stage、Repository、Remote
Workspace :开发者工作区,当前写代码的目录
Stage :暂存区 / 缓存区
Repository :本地仓库,本地所有的提交都会保存在这里,git 会保存好每一个历史版本
Remote :远程仓库,服务器仓库(github,gitee...)
生成 SSH 公钥和私钥,公钥要复制配置到 git 服务器上,可通过终端或者 Git Bash Here 打开命令
// 查看 ssh 版本,同时判断 ssh 是否已经安装
ssh -V
// 生成 ssh 密钥
ssh-keygen -o
// 指定目录
cd ~/.ssh/
// 查看 ssh,id_rsa.pub 则为公钥,id_rsa 则为私钥,将公钥复制到 git 服务器
ls
// mac 用 cat 命令进行查看,.pub 后缀名为公钥
cat ~/.ssh/id_rsa.pub
配置提交用户名和用户邮箱
git config --global user.name "A"
git config --global user.email "[email protected]"
// 查看
git config -l
// 将添加或修改的文件提交到暂存区
git add .
// 将监控已经被 add 进暂存区的文件,会将被修改的文件再次提交到暂存区
git add -u
// . 和 -u 的集合
git add -A
// 提交到本地仓库
git commit -m 'feat:初始化项目'
// 使用 SSH 链接
git remote add github.origin https://github.com/k/d.git
// 移除远程仓库,默认名称为 origin
git remote rm origin
// 重新设置远程仓库 url
git remote set-url origin [email protected]:k/b.git
(首次推送要设置追踪)
// 设置本地分支追踪远程分支
git push --set-upstream origin main
``git push -u origin main`
-u
参数:当远程仓库没有对应的 main 分支则自动创建一个分支,并进行本地分支与远程分支的关联。后续便可使用 git push
替代 git push origin main
;
git push
默认推送到当前分支到远程仓库,若首次提交推送,可能会提示警告;
git push --set-upstream origin main
设置本地分支对应的远程仓库分支,并进行推送关联。如果远程仓库中存在此分支,则还可以通过git branch --set-upstream-to=origin/main
进行设置关联,关联后可直接使用git push
进行推送。
关于推送:[推送连接](git push时如果遇到问题,来试试这几种方式 - 掘金git push时如果遇到问题,来试试这几种方式 - 掘金)
查看当前是否开启了忽略大小写的设置,true 则表明设置了忽略或默认开启了
git config core.ignorecase
// false: 设置不忽略
git config core.ignorecase false
修改前先将 Test 文件夹备份并修改为 TestTemp <临时文件夹>,再执行命令:
git rm Test
// 再将备份文件夹名字修改为需要的文件夹
备份删除的文件,删除文件后再进行仓库提交,之后将文件复制回并修改文件大小写,再重新提交。
区别:
git fetch
是将远程仓库的最新代码拉取到本地仓库(此时还没有合并到工作空间中),用户在检查了以后决定是否合并到工作空间的分子中。
git pull
是将远程仓库的最新代码拉取后直接合并到本地空间,即 git pull = git fetch + git merge
,这样可能会产生冲突,需要手动解决。
// 只拉取 origin 远程的 dev 分支
git fetch origin dev
// 拉取整个仓库的变更到本地仓库
git fetch
// 更多基本操作
//https://www.cnblogs.com/runnerjack/p/9342362.html
// 拉取并合并(跟 fetch 类似)
git pull // 全部
// 单独分支
git pull origin dev
同样一个本地仓库可以设置多个远程仓库,同步提交
// 设置 github 远程仓库
git remote add github.origin [email protected]:k/b.git
// 设置 Gitee 远程仓库
git remote add gitee.origin [email protected]:k/b.git
// 推送 github
git push github.origin
// 推送 gitee
git push gitee.origin
// 移除本地记录的远程仓库地址
git remote rm gitee.origin
// 目前没指定分支,默认为 master
git clone https://github.com/aehyok/demo.git
// 指定分支名称
git clone -b master https://github.com/aehyok/demo.git
// 克隆指定远程仓库下的指定分支
git clone gitee.origin main
// 克隆指定远程仓库下指定分支指定文件或文件夹
# 开启稀疏检出
$ git config core.sparseCheckout true
# sparse-checkout文件里写入要拉取的文件或者文件夹
$ echo 'Pravite' >> .git/info/sparse-checkout
# 同步
$ git pull origin master
查看提交日志的各种命令
git log
// 单行输出
git log --oneline
// 知道每个提交关联的分支或者标签
git log --oneline --decorate
// 查看当时提交的备注信息(备注要规范)
git log -S "...."
// 更多查看地址
// https://www.cnblogs.com/lsgxeva/p/9485874.html
// 完整 commmit_id
git rev-parse HAED
// short commit id
git rev-parse --short HEAD
删除已经 push 到服务器的提交记录,到某个 commit_id
// 1、找到想退回的 commitid
git log
// 2、将代码进行退回
git reset --soft commit_id
// 3、推送到服务器
git push origin master --force
// 1、找到想退回的 commit_id
git log
// 2、代码退回,之后提交的代码将会消失
git reset --hard commit_id
// 3、完成撤销,停留在当前版本,之前的代码仍然存在,但本地提交记录不存在
git reset commit_id
有时候我们写着某个需求,或者某个比较严重的 bug 或者重构代码,突然告诉你,有一个问题要处理一下,你又不想再单独的建分支了,此时可以使用 stash
// 将当前代码状态展示切换 WIP
git stash save '备注'
// 恢复:需要切换到之前的分支,然后再执行
// 应用最近一次 stash
git stsh apply
// 引用指定 stash,先 list
git stash apply stash@{0}
// 或者 pop`
// 若 stash 多次,可通过 list 命令列出所有的 stash
git stash list
// 如果都恢复完毕,可以使用 clear 进行清除
git stash clear
// 最近的一次
git reset --soft HEAD^
// 查看日志,已经 commit 但没有 push 的代码已经返回到本地更改中
git log
// 指定 commitid 的提交(最近一次的提交到指定的 commitid)所有更改
git reset --soft commitid
// 如果没有 push 到远程服务器,直接 push,如果已经 push,则会与本地存在差异
git push -f
// 直接重置到 commitid ,慎用
git reset --hard commitid
将密钥拷贝到linux服务器,这样就可以做到免密登录
// 免密拷贝密钥
cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authroized_keys"