git 中容易遗忘的点 (三) 🚀🚀🚀

现在大部分开发工具都可以直接进行菜鸟下面说的大部分操作,具体见:虽然理解git命令,但是我选择vscode插件!

接前两篇:

  1. git 中容易遗忘的点 (二) ⚡⚡⚡
  2. git 中容易遗忘的点 (一) 💥💥💥

推送/抓取 指定分支

推送分支

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时要指定本地分支,这样Git就会把该分支推送到远程库对应的远程分支上:

java 复制代码
$ git push origin master

如果要推送其他分支,比如dev,就改成:

java 复制代码
$ git push origin dev

切换远程分支

多人协作时,大家都会往master和dev分支上推送各自的修改。

现在,模拟一个你的小伙伴A,可以在另一台电脑(注意要把SSH Key添加到GitHub)或者 同一台电脑的另一个目录下克隆:

java 复制代码
$ git clone git@github.com:pbw-langwang/gitskills.git
Cloning into 'gitskills'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

当A从远程库clone时,默认情况下,A只能看到本地的master分支。不信可以用 git branch 命令看看:

java 复制代码
$ git branch
* master

现在,A要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支(前提是你的远程厂库有dev分支,不然这样是不行的):

java 复制代码
$ git switch -c dev origin/dev

如果远程仓库没有dev分支,会报错:

java 复制代码
invalid reference: origin/dev

解决办法是:先自己创建该分支,然后push,再回到这里使用就好了!

抓取分支报错

如果 git fetch origin <branch-name> 提示:

There is no tracking information for the current branch.Please specify which branch you want to merge with.

说明本地分支和远程分支的连接关系没有创建,用下方命令创建关联:

git branch --set-upstream-to=origin/<branch-name> <branch-name>

注:本地和远程分支的名称最好一致

删除远程分支

perl 复制代码
git push origin --delete <branch-name>

如果不小心把错误的代码提交到远端了,怎么办?

感觉开发中还是挺常见的,例如:

一开始领导让你开发功能,开发完了都上线测试了,结果说不要了 或者 误操作,导致不小心把本地的代码推送到远端了

这个时候很多人都不知道怎么搞!

因为不能直接删除远端分支,其可能是受保护的,然后回退代码回退的是本地的分支,编译器又会提示你可以拉取远端的代码。

其实这里可以先 回退(reset) 本地分支,然后使用这个命令:

git 复制代码
git push origin 你回退的分支 --force-with-lease

使用完成后再去gitlab新建合并请求就行!

注意:

如果远端被别人改了 → 拒绝覆盖

那这个时候就需要

git 复制代码
    git revert <commit-id>
    git push

把需要忽略的文件提交到远端了,怎么办?

感觉开发中还是挺常见的,例如:

你的编译器可能安装了某个插件,导致有一些提示,但是其实不重要,你就可以新建一个插件读取的json配置文件,让其不提示,你感觉别人也会安装这个插件,所以提交了!

但是你发现后面多次修改了这个文件,且其它人可能根本不关心,这个时候,文件已经在远端了,你该怎么删除?

这个其实很简单:

直接删除这个文件(留个备份),并在.gitignore加上这个文件的名称即可,等提交后再新建一个就行!

有没有更好的办法?

直接执行该命令

git 复制代码
git rm --cached cspell.json

然后,在.gitignore加上这个文件的名称,提交即可!(省去了留备份的问题)

版本回退和版本前进

版本回退

在Git中,用HEAD表示当前版本,也就是最新的提交d696468860aab706dfb385ea4c85a11a0e37d86f(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^ ,上上一个版本就是HEAD^^ ,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成HEAD~100。

这里菜鸟建议,直接记下两个就好:一个是HEAD^;另一个就是HEAD~XX

现在我们要把当前版本回退到上一个版本,需要用到 git reset 命令,显示如下:

csharp 复制代码
git reset --hard HEAD^
HEAD is now at d0e121c add four line

注意:

  1. --hard 参数:将 HEAD 指针、索引(暂存区)和工作目录中的文件全部重置为指定提交的状态 如果有未提交的代码,千万不要加`--hard`,直接用`git reset HEAD^`即可,会用默认的`--mixed`会保留未提交的代码!

  2. 如果是版本号的方式回退,而且正好有两个版本的的版本id一致,那么会跳转到离新版本最远的的一个

Git的版本回退速度非常快 ,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

改为指向add distributed:

然后顺便把工作区的文件更新了。所以你让 HEAD 指向哪个版本号,git 就把当前版本定位在哪!

版本前进

当你回退版本后,最近的版本已经变成了上一个版本,那这个时候想变回最新的版本怎么办?

例如:你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在Git中总是有后悔药可以吃的 。当你用 git reset --hard HEAD^ 回退到某个版本时,再想恢复到最新版,就必须找到最新版的 commit id。Git提供了一个命令 git reflog 用来记录你的每一次命令(只有reset和commit 即:对版本库的操作 ):

perl 复制代码
git reflog
ff8a5d3 HEAD@{1}: reset: moving to HEAD^
d0e121c HEAD@{2}: reset: moving to HEAD^
d696468 (HEAD -> master) HEAD@{3}: commit: read boke to change
d0e121c HEAD@{4}: commit: add four line
ff8a5d3 HEAD@{5}: reset: moving to ff8a5d
c471641 HEAD@{6}: reset: moving to HEAD~2
ff8a5d3 HEAD@{7}: commit: add three line
5222f9d HEAD@{8}: commit: add one line
c471641 HEAD@{9}: commit (initial): 2020 6 29

幸运的是,你的commit被记录了,所以你可以看见你最新版本的版本号:d696468。

所以可以使用:

scss 复制代码
git reset --hard d69646(版本号)

注意:版本号,不要写太少,不然可能有重复,而使git无法确定具体是哪一个版本!

理解分支与分叉

见:git自我研究:分支与分叉

相关推荐
名字还没想好☜1 小时前
React setState 连续调用「丢更新」排查:批量更新与函数式更新
前端·javascript·react.js·react·usestate
come112341 小时前
Vue 2 与 Vue 3 语法区别及使用技巧
前端·javascript·vue.js
腻害兔2 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:ERP 企业资源模块,一个轻量级进销存的完整实现?
前端·javascript·vue.js·人工智能·前端框架·产品经理·ai编程
虹科网络安全2 小时前
艾体宝新闻|从 SQL 注入到服务器接管:CVE-2026-57517 暴露 Web 管理面板的供应链与安全编码风险
服务器·前端·sql
糖果店的幽灵2 小时前
langgraph的四种state解析
java·前端·javascript·langgraph
顺颂时绥_12 小时前
前端大图片压缩与安卓/苹果设备矫正实践
前端
Csvn2 小时前
JSON.parse 大数精度丢失:一个让前后端互相甩锅的 Bug
前端
Helen_cai2 小时前
OpenHarmony 项目统一全局样式、尺寸、色彩主题封装 ThemeUtil(API23)
开发语言·前端·javascript·华为·harmonyos
郑州光合科技余经理2 小时前
家政O2O平台解析:从0搭建上门预约小程序解决方案
android·java·开发语言·前端·小程序·架构·php