git常用操作

全局配置用户信息

arduino 复制代码
git config --global user.name "smyhvae"

git config --global user.email "smyhvae@163.com"

分支的合并

场景:基于master分支的代码,开发一个新的特性

如果你直接在master分支上开发这个新特性,是不好的,万一你在开发特性1的时候,领导突然又要叫你去开发特性2,就不好处理了。难道开发的两个特性都提交到master?一会儿提交特性1的commit,一会儿提交特性2的commit?这会导致commit记录很混乱。

所以,我给你的建议做法是:给每个特性都单独建一个的新的分支。

比如说,我专门给特性1建一个分支feature_item_recommend。具体做法如下:

(1)基于master分支,创建一个新的分支,起名为feature_item_recommend

css 复制代码
$ git checkout -b feature_item_recommend

Switched to a new branch 'feature_item_recommend'

上面这行命令,相当于:

bash 复制代码
$ git branch feature_item_recommend    // 创建新的分支

$ git checkout feature_item_recommend  //切换到新的分支

(2)在新的分支feature_item_recommend上,完成开发工作,并 commit 、push。

(3)将分支feature_item_recommend上的开发进度合并到master分支:

bash 复制代码
$ git checkout master  //切换到master分支

$ git merge feature_item_recommend    //将分支 feature_item_recommend 的开发进度合并到 master 分支

合并之后,master分支和feature_item_recommend分支会指向同一个位置。

(3)删除分支feature_item_recommend

既然 特性1 开发完了,也放心地提交到master了,那我们就可以将这个分支删除了。

复制代码
git branch -d feature_item_recommend

注意,我们当前是处于master分支的位置,来删除feature_item_recommend分支。如果当前是处于feature_item_recommend分支,是没办法删除它自己的。

同理,当我转身去开发特性2的时候,也是采用同样的步骤。

合并分支时,如果存在分叉

比如说上面这张图中,最早的时候,master分支是位于C2节点。我基于C2节点,new出一个新的分支iss53,我在iss53上提交了好几个commit。

现在,我准备把iss53上的几个commit合并到master上,此时发现,master分支已经前进到C4了。那该怎么合并呢?

合并的命令仍然是:

bash 复制代码
$ git checkout master

$ git merge iss53

解释

这次合并的实现,并不同于简单的并入方式。这一次,我的开发历史是从更早的地方开始分叉的。

由于当前 master 分支所指向的commit (C4)并非想要并入分支(iss53)的直接祖先,Git 不得不进行一些处理。就此例而言,Git 会用两个分支的末端(C4 和C5)和它们的共同祖先(C2)进行一次简单的三方合并计算。

Git 没有简单地把分支指针右移,而是对三方合并的结果作一新的快照,并自动创建一个指向它的commit(C6)(如下图所示)。我们把这个特殊的commit 称作合并提交(mergecommit),因为它的祖先不止一个。

值得一提的是Git 可以自己裁决哪个共同祖先才是最佳合并基础;这和CVS 或Subversion(1.5 以后的版本)不同,它们需要开发者手工指定合并基础。所以此特性让Git 的合并操作比其他系统都要简单不少。

解决合并时发生的冲突

如果 feature1和feature2修改的是同一个文件中代码的同一个位置,那么,把feature1合并到feature2时,就会产生冲突。这个冲突需要人工解决。步骤如下:

(1)手动修改文件:手动修改冲突的那个文件,决定到底要用哪个分支的代码。

(2)git add:解决好冲突后,输入git status,会提示Unmerged paths。这个时候,输入git add即可,表示:修改冲突成功,加入暂存区

(3)git commit 提交。

然后,我们可以继续把 feature1 分支合并到 master分支,最后删除feature1、feature2。

注意:两个分支的同一个文件的不同地方合并时,git会自动合并,不会产生冲突。

比如分支feture1对index.html原来的第二行之前加入了一段代码。 分支feature2对index.html在原来的最后一行的后面加入了一段代码。 这个时候在对两个分支合并,git不会产生冲突,因为两个分支是修改同一文件的不同位置。 git自动合并成功。不管是git自动合并成功,还是在人工解决冲突下合并成功,提交之前,都要对代码进行测试。

日常操作积累

修改密码(曲线救国)

采取如下方式进行曲线救国。

bash 复制代码
# 设置当前仓库的用户名为空
git config  user.name ""

然后,当我们再输入git pull等命令行时,就会被要求重新输入新的账号密码。此时,密码就可以修改成功了。最后,我们还要输入如下命令,还原当前仓库的用户名:

arduino 复制代码
git config user.name "smyhvae"

修改已经push的某次commit的作者信息

已经push的记录,如果要修改作者信息的话,只能 通过--force命令。我反正是查了很久,但最终还是不敢用公司的仓库尝试。

参考链接:

看最后一条答案。

branch1的某个commit1合并到branch2当中

切换到branch2中,然后执行如下命令:

复制代码
git cherry-pick commit1

修改GitHub已提交的用户名和邮箱

参考链接:(亲测有效)

在执行./email.sh后,如果出现permission denied的错误,可以先执行chmod 777 email.sh,修改文件的权限。

将Git 项目迁移到另一个仓库

我们假设旧仓库的项目名称叫old-repository,新仓库的项目名称叫new-repository。操作如下:

(1)创建旧仓库的裸克隆:

bash 复制代码
git clone --bare https://github.com/exampleuser/old-repository.git

执行上述命令后,会在本地生成一个名叫 old-repository.git的文件夹。

(2)迁移到新仓库:

bash 复制代码
cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git

这样的话,项目就已经迁移到新仓库了。

注意,我们不需要手动新建一个空的新仓库,当我们执行上述命令之后,新仓库就已经自动创建好了。

参考链接:

提交代码时,绕过 eslint 检查

需求:提交代码时,绕过 eslint 检查

解决办法:用命令行提交,末尾追加--no-verify。例如:

bash 复制代码
# 提交代码
git commit -m '千古壹号的commit备注' --no-verify

# 推送到远程时,也可以追加 --no-verify,以免远程仓库做了 eslint 限制。
git push origin --no-verify

切换仓库的源地址

查看源地址:

复制代码
git remote -v

切换源地址:

bash 复制代码
git remote set-url origin https://xxx.git

推荐书籍

  • 《pro.git中文版》
  • 公众号:大前端全栈开发

本文由mdnice多平台发布

相关推荐
demo007x1 小时前
让大模型活在你的鼠标旁:我用 Tauri 2 + Rust 打造了一款“反直觉”的 AI 全局划词效率神器
macos·程序员·llm
程序员海军3 小时前
AI 越来越强,为什么打工人反而越来越累、越来越内耗了?
前端·程序员·aigc
badhope7 小时前
同样写 AI,为什么有的文章 549 人看、有的只有 16 人看?——我用 40 篇掘金文章的真实数据复盘
程序员
今朝唯我少年郎1 天前
Codex安全盲区代码漏洞生成实测
python·程序员
kyriewen2 天前
我用 AI 写完一个需求后才发现,最难的不是 prompt,而是验收
前端·程序员·ai编程
酷酷的逗逗乐2 天前
前端转 Agent 开发 · 第六节
前端·程序员
爱勇宝2 天前
没有 Fn 键关触控板?我做了一个双击即用的 Windows 小工具
前端·后端·程序员
程序员cxuan2 天前
跟 WebUI 说再见了,最强 DeepSeek 桌面端来了!
人工智能·后端·程序员
codigger2 天前
用 AI 写代码,你知道它会把我的代码传去哪?
ai·程序员·编程·数据安全
程序员cxuan2 天前
DeepSeek V4.1 Flash 正式发布!
人工智能·后端·程序员