携手创造,一起生长!这是我参与「日新计划 8 月更文应战」的第14天,点击检查活动详情。

前语:平常在windows电脑上运用Git Extensions 东西比较多,大部分的常用指令都能够经过点点点就能够完成。在mac电脑上的话运用sourcetree东西。但有时候也会直接经过git指令,许多时候也是经过百度来暂时查阅,所以总结下来便利自己,也便利可能需要的你。

1、git根本结构

git根本组成结构:Workspace、Stage、Repository、Remote

  • Workspace:开发者作业区,其时写代码的目录
  • Stage:暂存区/缓存区
  • Repository:本地库房,本地一切的提交都会保存在这儿,git会保存好每一个前史版别
  • Remote:长途库房,服务器库房(github、gitee等等等等)

git装置在这儿就不提了,假如不清楚能够去查查了

2、SSH秘钥

许多搭档在入职第一天的时候,都会遇到运用git来拉取代码的状况。但是我发现前端开发许多时候自己都搞不定第一步。给自己开了一个十分欠好的最初。

我平常主要是用以下几个指令,生成SSH公钥和私钥,公钥要仿制装备到git服务器上,可经过终端或许Git Bash Here翻开指令

// 检查ssh版别,一起判断ssh是否现已装置,装置git即可
ssh -V
// 生成SSH密钥
ssh-keygen -o
// 导航到指定目录
cd ~/.ssh/
// 检查ssh,id_rsa.pub则为公钥,id_rsa则为私钥,将公钥仿制到git服务器(其实是文件里面的字符串)
ls
// mac下能够用cat指令进行检查 .pub后缀名为公钥,另外一个为私钥,将公钥仿制到服务器或许github或许code.aliyun.com上
cat ~/.ssh/id_rsa.pub

3、 git config 装备提交用户名和用户邮箱

git config --global user.name "aehyok"
git config --global user.email "aehyok@163.com"
// 装备好后可经过这个来检查
git config -l

4、将文件增加到暂存区

// 将增加或修正的文件提交到暂存区
git add .
// 将监控现已被add进暂存区的文件,会将被修正的文件再次提交到暂存区
// 或许是
git add -u
// 则是git add .和 git add -u 两个指令的集合
// 或许是
git add -A

4、 提交到本地库房(即自己其时电脑的代码库房)

// 提交到本地库房
git commit -m ' feat: 初始化项目'

5、 设置长途库房地址(即代码要提交到哪里的服务器)

// 当然也能够运用ssh 链接
git remote add github.origin https://github.com/aehyok/demo.git
// 移除长途库房,默认名称为origin
 git remote rm origin
// 重新设置长途库房url
 git remote set-url origin git@github.com:aehyok/vue-qiankun.git

6、 推送到长途服务器(注意一点,初次推送要设置追寻)

// 设置本地分支追寻长途分支、、、之后就能够直接git push
git push --set-upstream origin main

关于推送我前两天总结了几点,有兴趣的能够点击检查 /post/712704…

7、 在vscode中修正文件名会疏忽大小写

由于在默认的状况下是疏忽了,所以修正文件名大小写是无效的。

这儿能够经过指令来检查其时是否敞开了疏忽大小写的设置,true则表明设置了疏忽或许默认敞开了。

git config core.ignorecase
// 后面加上false则直接可设置不疏忽,修正文件名大小写后会生效
git config core.ignorecase false

8、修正文件夹姓名大小写的问题

// (修正前先将Test文件夹备份并修正为TestTemp<一个暂时文件夹姓名罢了>,
// 然后履行指令
git rm Test
// 再将备份文件夹姓名修正为需要的文件夹即可
--------------另外一种简单粗暴的方法-----------------
// 仍是先备份好要删去的文件,然后将文件删去,提交到库房。
// 完过后将备份的文件仿制回来,然后修正文件大小写,再提交即可。

9、 git fetch和git pull区别

  • 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  // 独自分支

10、相同一个本地库房能够设置多个长途库房(github、gitee便利做同步代码)

注意:在一个代码库房中你能够增加一个github的长途库房,一起能够增加一个gitee的长途库房,在提交代码的时候,能够同步提交(终究提交的时候git push 两次罢了),这样假如某一天github运用不了了,那么gitee的同步作用就体现出来了。

// 设置个github长途库房
git remote add github.origin git@github.com:aehyok/blog.git
git remote add gitee.origin git@gitee.com:aehyok/blog.git
// 推送到github
git push github.origin
//  推送到gitee
git push gitee.origin
// 移除长途库房地址
git remote rm gitee.origin

11、克隆代码库

// 现在没指定分支,默以为master
git clone https://github.com/aehyok/demo.git
// 指定分支名称
git clone -b dev  https://github.com/aehyok/demo.git
// 克隆指定长途库房下的指定分支(gitee.origin为git remote add 设置的别号)
git clone gitee.origin  main

12、git add . 时 vscode中正告 warning: LF will be replaced by CRLF in src/index.js.

git config --global core.autocrlf false

13、假如新装电脑后运用git 操作代码可能会报错

// 晋级了OpenSSH 后报错
// Unable to negotiate with 47.98.49.44 port 22: no matching host key type found. Their offer: ssh-rsa
// fatal: Could not read from remote repository.
// Please make sure you have the correct access rights
// and the repository exists.
// 由于OpenSsh晋级了,需要在xx/xx/xx/.ssh目录下增加config文件(没有后缀名) ,增加以下三行代码
    Host *
    HostkeyAlgorithms +ssh-rsa
    PubkeyAcceptedKeyTypes +ssh-rsa      

15、git log 详细操作

检查提交日志的各种指令

git log
// 单行输出
git log --oneline
// 知道每个提交相关的分支或许标签 
git log --oneline --decorate
// 有时候不太清楚某段代码的含义,能够检查一下其时提交的备注信息(当然备注信息要规范才有意义)
git log -S "XXXXXXXX"
// 更多的能够检查地址
https://www.cnblogs.com/lsgxeva/p/9485874.html

16、删去现已push到服务器的提交记载,到某个commitid

//1、找到想要退回到的那个commitid
git log 
2、然后将代码退回到那个commitid
git reset --hard commitid
3、推送到服务器,现已要加上--force
git push origin HEAD:dev --force

17、删去没有push到长途服务器的commit记载

// 1、经过找到想要退回到的commit_id
git log 
// 2、本地代码会变成你想要的那次代码。这次之后提交的代码都没有了
git reset --hard id 
// 3、完成撤销,停留在其时版别,之前的代码仍是在的。仅仅本地的提交记载没了
git reset id 

18、vscode中装备git bash 作为指令行

- https://zhuanlan.zhihu.com/p/365625019

19、在某个分支暂存某些暂时代码

有时候咱们写着某个需求,或许某个比较严重的bug,或许重构代码,突然告诉你,有一个问题要处理一下,你又不想再独自的建分支了,此刻能够运用stash

// 将其时代码状态暂时切换WIP
git stash save '备注'
// 履行后 Saved working directory and index state WIP on dev: b4d9dc5 feat: 兼并行和列
// 想康复的话需要切换到之前的分支,然后再履行
// 应用最近一次的stash
git stash apply   
// 应用指定stash, 先list
git stash apply  stash@{0}  //apply后,list中还会存在
// 或许 pop
git stash pop stash@{0}  // pop后,list中不会存在
//假如stash了屡次,可经过list指令列出一切的stash
git stash list 
// 假如都康复结束 能够运用clear进行清除
git stash clear       

20、康复commit提交

// 最近一次的
git reset --soft HEAD^
git log //经过检查日志能够发现,现已commit,但没有push的代码现已返回到本地更改中, 并且git log中不会留下记载
// 指定commitid的提交(最近一次的提交到指定的commitid) 一切更改
git reset --soft commitid
//假如没有push到长途服务器,直接push即可
git push
// 假如现已push到长途服务器,由于服务器与本地存在差异
git push -f
// 直接重置到commitid  一般慎用
git reset --hard commitid

21、git subtree

  • /post/701834…
  • segmentfault.com/a/119000000…

22、 免密登陆linux

平常许多人可能会打包或许经过脚本,或许经过自动化东西,前端项目进行打包,有时候就不可避免的要长途linux服务器,能够将密钥拷贝到linux服务器,这样就能够做到免密登录,很便利

//本地生成就不说了在上面 
cat ~/.ssh/id_rsa.pub | ssh root@139.159.245.209 “cat - >> ~/.ssh/authorized_keys”

23、我的mac在某一天不知道是由于我装了啥,仍是晋级了什么导致如下错误,也能用,但是每次都会提示

Are you sure you want to continue connecting (yes/no/[fingerprint])?

vim ~/.ssh/config
// 增加如下
StrictHostKeyChecking no

24、总结

  • 关于git push我前两天的总结 /post/712704…

  • 关于git branch我前两天的总结/post/712782…

  • 关于git tag我前两天的总结/post/712782…

  • 关于git 兼并代码我前两天的总结/post/712896…

  • 许多东西全靠记忆可能是行不通的,俗语云好记忆不如烂笔头