平常在windows电脑上使用Git Extensions 工具比较多,大部分的常用指令都可以通过点点点就可以完成。在mac电脑上的话使用sourcetree工具。但有时候也会直接通过git命令,很多时候也是通过百度来临时查阅,所以总结下来方便自己,也方便可能需要的你。
1、基本命令
- 1.1、 生成SSH公钥和私钥,公钥要复制配置到git服务器上,可通过Git Bash Here打开终端命令,前提需要安装gitjavascript
// 查看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
- 1.2、 git config 配置提交用户名和用户邮箱javascript
git config --global user.name "aehyok" git config --global user.email "aehyok@163.com" // 配置好后可通过这个来查看 git config -l
- 1.3、 创建项目后如何提交到仓库javascript
// 创建项目后到指定的项目文件夹中初始化git git init
- 1.4、 将文件添加到暂存区javascript
// 将添加或修改的文件提交到暂存区 git add . // 将监控已经被add进暂存区的文件,会将被修改的文件再次提交到暂存区 // 或者是 git add -u // 则是git add .和 git add -u 两个命令的集合 // 或者是 git add -A
- 1.5、 提交到本地仓库(即自己当前电脑的代码仓库)javascript
// 提交到本地仓库 git commit -m ' feat: 初始化项目' // commit提交时不进行检查husky钩子 git commit --no-verify -m 'xxx'
- 1.6、 设置远程仓库地址(即代码要提交到哪里的服务器)javascript
// 当然也可以使用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/AK47-GPT.git
- 1.6.1、获取远程仓库地址javascript
// 获取远程仓库地址 git remote -v
- 1.7、 推送到远程服务器(注意一点,首次推送要设置追踪)javascript
// 设置本地分支追踪远程分支、、、之后就可以直接git push git push --set-upstream origin main
- 1.8、 修改文件名会忽略大小写,默认都是忽略了,所以修改文件名大小写是无效的javascript
// (查看是否忽略大小写) true则设置了忽略 git config core.ignorecase // 后面加上false则直接可设置不忽略,修改文件名大小写后会生效 git config core.ignorecase false
- 1.9、修改文件夹名字大小写的问题javascript
// (修改前先将Test文件夹备份并修改为TestTemp<一个临时文件夹名字而已>, // 然后执行命令 git rm Test // 再将备份文件夹名字修改为需要的文件夹即可 --------------另外一种简单粗暴的方式----------------- // 还是先备份好要删除的文件,然后将文件删除,提交到仓库。 // 完事后将备份的文件复制回来,然后修改文件大小写,再提交即可。
- 1.10、 是将远程主机的最新内容拉到本地 ,用户在检查了以后决定是否合并到工作本机分支中。javascript
git fetch //更多基本操作 //https://www.cnblogs.com/runnerjack/p/9342362.html
- 1.11、同样一个本地仓库可以设置多个远程仓库,然后通过不同的git push github.originjavascript
// 设置个github远程仓库 git remote add github.origin https://github.com/aehyok/demo.git // 设置个gitee远程仓库 git remote add gitee.origin https://github.com/aehyok/demo.git // 推送到github git push github.origin // 推送到gitee git push gitee.origin // 移除远程仓库地址 git remote rm gitee.origin
- 1.12、克隆代码库javascript
// 目前没指定分支,默认为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
- 1.13、git add . 时 vscode中警告 warning: LF will be replaced by CRLF in src/index.js.javascript
// 查看当前设置 git config core.autocrlf git config --global core.autocrlf false
- 1.14、拉取远程分支代码到本地(拉取dev分支代码到本地的分支)javascript
git fetch origin dev git pull origin dev
- 1.15、如果新装电脑后使用git 操作代码可能会报错javascript
// 升级了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
- 1.16、git log 详细操作
2、分支管理
- 2.1、 创建分支javascript
// 切换到基础分支 git checkout main // 根据 切换到的main分支,创建dev分支并切换到dev分支 git checkout -b dev
- 2.2、 查看分支javascript
// 查看本地分支 git branch // 查看本地分支和远程分支,如果不存在需要git fetch一下 git branch -a // 查看远程分支 git branch -r
- 2.3、 修改分支名称javascript
// 修改当前本地分支的名称 git branch -m develop-lqm // 也可以修改指定的分支 原分支名称 新分支名称 git branch -m develop-lam develop-lqm
- 2.4、 删除本地分支和删除远程分支javascript
// 先切换到其他分支 git checkout dev // 删除本地分支 git branch -d dev // 如果删除不了,可以进行强制删除 git branch -D dev // 有必要的情况下,删除远程分支但是要谨慎使用 git push origin --delete dev
3、合并代码
- 3.1、 将某个提交,任何跟仓库所有分支的commit 合并到当前分支javascript
// (正常情况直接合并成功,可能存在重复图需要手动解决) git cherry-pick commitid // git多个commitid git cherry-pick commitid commitid1 commitid2 commitid3 // 正常情况直接push即可,手动解决冲突需要commit 再进行push git push // 扩展阅读:还可以一起提交commitid-A到commitid-B 之间所有的内容修改 // http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html
- 3.2、 当前分支dev的代码提交push成功,此时想合并到main分支上javascript
// 先切换到main分支 git checkout main // 将dev分支的变更拉取到main分支上来 git merge dev // 合并完成,即可推送到远程服务器 git push -u origin main
4、tag标签(根据tag标签创建的分支不要与标签名一致)
- 4.1、添加一个tag,并推送到远程仓库javascript
git tag -a 3.11.3.001 -m "release 3.11.3.001" git push origin 3.11.3.001
- 4.2、 删除一个tagjavascript
git tag -d 3.11.3.001 git push origin :refs/tags/3.11.3.001
- 4.3、 查看tagjavascript
git tag
- 4.4、在某个commit上打tagjavascript
git tag test_tag c809ddbf83939a89659e51dc2a5fe183af384233 git push origin test_tag //!!!本地tag推送到线上
- 4.5、 根据tag创建分支javascript
https://www.cnblogs.com/senlinyang/p/9455426.html git branch newbranch 3.11.3.001 // 切换到分支 git checkout newbranch
- 4.6、删除已经push到服务器的提交记录,到某个commitidjavascript
1、找到想要退回到的那个commitid git log 2、然后将代码退回到那个commitid git reset --hard commitid 3、推送到服务器,已经要加上--force git push origin HEAD:dev --force
- 4.7、删除没有push到远程服务器的commit记录javascript
1、通过找到想要退回到的commit_id git log 2、本地代码会变成你想要的那次代码。这次之后提交的代码都没有了 git reset --hard id 3、完成撤销,停留在当前版本,之前的代码还是在的。只是本地的提交记录没了 git reset id
- 4.8、删除某个很多个提交javascript
// 1、查看提交 git log // 2、列出最后的提交和commitid之间的所有提交 // 然后把不需要的提交删除掉即可 git rebase -i commitid // 3、推送(谨慎使用,尽量单独分支处理好后) git push -f
5、小技巧
5.1、vscode中配置git bash 作为命令行
5.2、在某个分支暂存某些临时代码(不方便提交的)
javascript// 将当前代码状态暂时切换WIP git stash save '备注' // 执行后 Saved working directory and index state WIP on dev: b4d9dc5 feat: 合并行和列 //要将工作目录下的所有变更保存到一个新的WIP stash中,包括未跟踪的文件 git stash -u // 想恢复的话需要切换到之前的分支,然后再执行 // 应用最近一次的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 // 保存未跟踪的文件 git stash push --include-untracked //或者简写 git stash push -u
5.3、恢复commit提交 // https://mp.weixin.qq.com/s/LDxXR302F9G35x3uwHh0jg
javascript// 最近一次的 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
5.4 如果是已经push的一个提交
// 该提交已经被push到远程服务器, 使用后将删除所有的更改 git reset --hard HEAD~1 // 然后使用强制推送 git push -f
6、合并代码
6.1、将远程分支代码合并到本地
javascript// 先拉去远程分支代码,确保dev代码师最新的 git checkout dev git pull // 切换到自己的代码分支 git chekout dev-lqm // 执行将dev分支代码合并到dev-lqm git merge dev // 推送代码到自己的远程分支上 git push
6.2、git subtree
6.3 免密登陆linux
- https://juejin.cn/post/6844903734233792519javascript
//本地生成就不说了在上面 cat ~/.ssh/id_rsa.pub | ssh root@139.159.245.209 “cat - >> ~/.ssh/authorized_keys”
- https://juejin.cn/post/6844903734233792519
6.4、Are you sure you want to continue connecting (yes/no/[fingerprint])?
javascriptvim ~/.ssh/config // 添加如下 StrictHostKeyChecking no
6.5、两个git仓库进行代码和日志记录的合并
javascript// git@github.com:aehyok/blog1.git // git@github.com:aehyok/blog2.git // 以blog1仓库的main分支为基础,将blog2仓库的main分之合并到blog1仓库的main. //1.在blog1仓库下添加远程仓库blog2 git remote add blog2 git@github.com:aehyok/blog2.git //2.在blog1仓库下拉取数据到本仓库 git fetch blog2 //3.根据拉取将远程仓库的blog2的main分支,在本地创建blog2main git checkout -b blog2main blog2/main //4.切换回blog1的main分支 git checkout main //5.将本地分支blog2main合并到main分支 // 这两个仓库本来就是没有关联的,所以要加上参数 git merge blog2main --allow-unrelated-histories //最后如果没有冲突就结束了 // 如果有冲突就解决一下 git push
7、设置忽略文件
env文件设置忽略
//.gitignore文件中添加一行 .env.* //在.gitignore文件中添加完之后,需要将git索引中的文件移除 git rm --cached .env.*
8、恢复文件
// (如果还没有提交文件)撤销单个文件 git restore file git checkout -- file // 如果是多个文件的话 git chekcout -- . // 取消掉所有的更改 git reset --hard
9、设置git忽略
// 会匹配根目录下的 /server 目录,也会匹配任何子目录下的 server // 设置根目录下的server文件夹 server/