Skip to content

Git 笔记

创建时间 2018-11-12

最后更新 2024-06-19

配置

查看

$ git config user.name

$ git config user.email

生成

<span style="color:rgb(77, 77, 77);">ssh-keygen -t rsa </span>

git config --global user.name "qer"

git config --global user.email "[email protected]"

ubuntu 连接 github

macOS

生成ssh-keygen -t rsa -C <span style="color:rgb(126, 198, 153);">"[email protected]"</span>

打开cat <span style="color:rgb(103, 205, 204);">~/</span><span style="color:rgb(204, 204, 204);">.</span>ssh<span style="color:rgb(103, 205, 204);">/</span>id_rsa<span style="color:rgb(204, 204, 204);">.</span>pub

git config --global user.name "longyuqi"

git config --global user.email "[email protected]"

授权错误解决方法

**Windows **

C:\Users\qer\.ssh

教程

1. 我的第一个git命令笔记 CSDN

2. 如何安全地使用 Git 的指导方案

3.「阮」分支管理策略

4.「阮」远程操作详解

5.「阮」Git 使用规范流程 pr

6.「阮」Git 工作流程 issue

7. 练习 Git,以可视化的方式 visualizing-git


feat: 新功能

fix: 修改 bug

docs: 文档

perf: 性能相关

refactor: 代码重构(就是不影响使用,内部结构的调整)

test: 测试用例

style: 样式修改

workflow: 工作流

build: 项目打包构建相关的配置修改

ci: 持续集成相关

revert: 恢复上一次提交(回滚)

wip: work in progress 工作中 还没完成

chore: 其他修改(不在上述类型中的修改)

release: 发版

deps: 依赖相关的修改****


是的,您可以在 Git 远程仓库的 URL 中使用 Github token。具体地,您可以将 Github token 添加到您的仓库 URL 中,如下所示:

plain
https://${github_token}@github.com/USERNAME/REPO_NAME.git

将上面 URL 中的**${github_token}替换为您的 Github access token,并将USERNAMEREPO_NAME**替换为您要推送到的 Github 存储库的用户名和仓库名称。

例如,如果您的 Github 用户名为wbxl2000,要推送到名为TUICallKit的存储库,则您的仓库 URL 将如下所示:

plain
https://${github_token}@github.com/wbxl2000/TUICallKit.git

在 Git 命令行中使用此 URL 将不需要再次身份验证,而是使用在 URL 中提供的 Github token 进行身份验证。这样,您就可以使用 Github token 在命令行中推送代码了。

shell
cd ${WORKSPACE}/github_callkit

# 安装 gh ci 工具
sudo dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
sudo dnf install gh -y

echo ${github_token} > token.txt
gh auth login --with-token < token.txt

# 提交 PR
gh pr create --title "release: ${name}${version}" --body "" -R tencentyun/TUICallKit > ${WORKSPACE}/result.txt

echo "📢 TUICallKit/Web github 发布" >> ${WORKSPACE}/notice.txt
echo "PR 单已提交,请审核,地址如下:" >> ${WORKSPACE}/notice.txt
tail -n 1 ${WORKSPACE}/result.txt >> ${WORKSPACE}/notice.txt

git rebase 使用总结

一个很重要的作用:变基操作 http://jartto.wang/2018/12/11/git-rebase/

http://gitbook.liuhui998.com/4_2.html

1 假设要变基到 main 上

  1. 去 main 分支 pull 最新版本
  2. 切换到要 rebase 的分支 执行 git rebase main
  3. 然后会出现冲突或者未提交的内容,手动处理冲突,未提交的内容不用管,之后执行 git rebase --continue ,vscode 可以直接用左侧边栏第三个源代码管理看显示为红色的文件
  4. 会继续出现下一个结点与现在冲突的内容,继续处理,直到最后一次 continue 会自动结束

tips:变基后显示的变化 也就是未提交的 M 是指相较于 main 的最新版本的变化,从变基前的版本到 main 最新版本的变化是不显示的

tip2: 关于 rebase 的时候,“当前更改”和“传入的更改”分别代表什么,如下图所示

**2 假设要合并自己的前几个分支
**git rebase -i HEAD~3

git rebase -i 36224db // 不包括 36224db,是其之后的

LINK

如果您希望将一个提交之后的所有提交合并为一个,并更改作者为您本人,您可以使用 git rebase 命令结合 --interactive (-i) 标记进行交互式的变基操作。

请按照以下步骤执行:

  1. 确保您在 Git 仓库所在的目录中打开命令行终端。
  2. 切换到您想要进行变基操作的分支,假设这里是主分支(master):
plain
git checkout master
  1. 运行以下命令来开始交互式的 rebase 操作:
plain
git rebase -i 08e52d0b7de5459a89da459d1f374edd61a74ab3
  1. 这会打开一个文本编辑器,列出了从 08e52d0b7de5459a89da459d1f374edd61a74ab3 开始以后的所有提交。对于您希望保留的提交,将每一行前面的 pick 修改为 s(或者 squash):
plain
pick 08e52d0b7de5459a89da459d1f374edd61a74ab3 Commit message
s 1111111 Another commit message
s 2222222 Yet another commit message
...
  1. 保存并关闭编辑器,Git 会将这些提交合并为一个提交。
  2. 然后,Git 会要求您编辑并确认最终的提交消息。您可以更改作者信息。保存并关闭编辑器。

此时,您的提交历史将会被重新整理为一个提交,并且作者信息将被修改为您本人。请注意,在变基过程中可能会出现冲突,需要手动解决。确保在进行重写历史操作前备份重要数据。


git stash 使用

https://www.cnblogs.com/tocy/p/git-stash-reference.html

<span style="color:rgb(0, 0, 0);background-color:rgb(245, 245, 245);">git stash</span>

<span style="color:rgb(0, 0, 0);background-color:rgb(245, 245, 245);">git stash save </span><span style="color:rgb(163, 21, 21);">"test-cmd-stash"</span>

<span style="color:rgb(163, 21, 21);background-color:rgb(245, 245, 245);">git stash apply</span>

git stash pop 应用同时会把第一个弹出

<span style="color:rgb(0, 0, 0);background-color:rgb(245, 245, 245);">git stash list</span>

<span style="color:rgb(0, 0, 0);background-color:rgb(245, 245, 245);">git stash drop stash@{0}</span> <span style="color:rgb(232, 62, 140);background-color:rgb(246, 246, 246);">git stash clear</span>

如果有新增文件,则需要在 save 后面加参数 -a,或者先 git add .


查缺补漏

git merge bugFix是把这个分支合到当前的 main 上来


问题汇总

1. 减少.git的大小 网址

2. 本地仓库强制覆盖远程仓库

git push -f --set-upstream origin main:main

远程强制覆盖本地

<span style="color:rgb(8, 8, 8);background-color:rgb(249, 249, 249);"># 拉取所有更新,不同步;</span> <span style="color:rgb(8, 8, 8);background-color:rgb(249, 249, 249);">git fetch --all</span> <span style="color:rgb(8, 8, 8);background-color:rgb(249, 249, 249);"># 本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件);</span> <span style="color:rgb(8, 8, 8);background-color:rgb(249, 249, 249);">git reset --hard origin/master</span> <span style="color:rgb(8, 8, 8);background-color:rgb(249, 249, 249);"># 再更新一次(其实也可以不用,第二步命令做过了其实)</span> <span style="color:rgb(8, 8, 8);background-color:rgb(249, 249, 249);">git pull</span>

3. 设置代理

git config --local http.proxy 127.0.0.1:1080

4. 分支合并:

git merge --no-ff dev-header

禁止快进式合并,可以让main保持不变,git graph 从另一个分支合并回去。

如何取消 merge 的 commit 记录?--no-commit,这样图中也不会出现绕出来的分支了。否则哪怕 dev 只有一次 commit,那 pr 的时候也一共两个 commit。

5. 修改分支名称

git branch -m oldName newName

6. Github进行fork后如何与原仓库同步

https://github.com/selfteaching/the-craft-of-selfteaching/issues/67

检查远程仓库路径:git remote -v

删除上游仓库:git remote rm origin

设置上游代码库:git remote add upstream https://github.com/yqylh/Software-engineering.git

fetch 一下:git fetch upstream

rebase: git rebase upstream/main

push -f : git push -f

如果要 Merge:

切换到main分支:git checkout main

合并远程的main分支:git merge upstream/main

推送的远程:git push

修改远程仓库地址:<span style="color:rgb(3, 47, 98);">git</span> <span style="color:rgb(3, 47, 98);">remote</span> <span style="color:rgb(227, 98, 9);">set-url</span> <span style="color:rgb(3, 47, 98);">origin</span> [<span style="color:rgb(3, 47, 98);">url</span>]

4. git pull 与 git fetch 的区别

https://blog.csdn.net/weixin_41975655/article/details/82887273

git pull 会直接把远程同步到本地,fetch 会先同步到本地的remote,然后需要手动跟自己实际修改的分支merge

git pull --rebase 将本地的提交重新应用在远程提交之上,使得提交历史线性化;而 git pull -f 则是强制性地拉取并合并远程分支的最新提交,可能会覆盖本地的更改。

5. 删除远程分支

git push origin --delete new_a

6. git 设置远程仓库

git remote set-url origin [https://github.com/CUMCM2021-SDU0158/CUMCM.git](https://github.com/CUMCM2021-SDU0158/CUMCM.git)

7. git 追加 commit 内容

git commit --amend

8. git push origin main

9. 撤销上一次 commit

<span style="color:rgb(51, 51, 51);">git reset --soft HEAD^</span> 关于 soft 是将上一次 commit 的内容放到暂存区,hard 就是丢弃了

10. 拉取制定分支

git clone -b feat-something [email protected]:xxxxxxxxxx/xxxxx.git

11. 取消与设置代理

npm config delete proxy

npm config delete https-proxy

npm config set proxy=[http://127.0.0.1:](http://127.0.0.1:8087)23333

npm config set registry=[http://registry.npmjs.org](http://registry.npmjs.org)

12. 怎样把一个 commit 变到某个分支上

如 将 e92908c0 接到 feat-qer

git checkout feat-qer

git cherry-pick e92908c0 参考链接

13.如何将 A 分支 push 到 next 分支上

git push origin HEAD:next

14.git stash pop 之后有冲突,不想处理,想要回退 stash pop

<span style="color:rgb(77, 77, 77);">git </span>reset<span style="color:rgb(77, 77, 77);"> --hard</span>ref

15. 如何修改 commit 的作者

git rebase -i HEAD~1

pick 改为 edit

git commit --amend --author="rychouwei <[email protected]>"

git rebase --continue


我自己的习惯记录

git checkout -b dev-qer // 创建一个新的分支

git add .

git commit -m "fix(): xxx" 规范

git checkout dev // 正式项目主线是在dev上,不是在main上,往main上合并要慎重且合理发布,普通项目这里应该是 main

git merge --no-ff dev-qer // 这里如果不想产生merge的commit记录,要加--no-commit在前面

git branch -d dev-qer

git push

去 github 上提交 pr git pull origin main git fetch 的区别是什么?

公司的习惯记录

可以 rebase 一下,合并成一个小 commit

git rebase dev 处理出现的冲突

去 git 提交 MR


案例/练习题

  1. 最下面的 commit 变成 TUICallKit-dev

创建一个新分支

TUICallKit-build-monorepo rebase 到新分支 move-folder

然后切换到 dev, reset har(忽略 changes)切换过去就好了

  1. 把最近的 3 个提交合并成同一个,并且保留第一个的 commit。如果保留最后一个的 commit 呢?
  2. 我有一个git分支,目前是 A -> B -> C -> D,D 是 head,现在我想变成 A -> D,我应该逐步执行哪些 git 命令?并解释。

git rebase -i HEAD~3

pick a1b2c3 A

drop d4e5f6 B

drop g7h8i9 C

pick j0k1l2 D

怎样撤销这个操作

git reflog

git reset --hard abc123

  1. 把github 仓库的 IMG_233.JPEG 换成 IMG_233.jpeg ,并且传到 github 上去

发布

Annotated Tags: git tag -a v1.4 -m "my version 1.4"

Lightweight Tags: git tag v1.0

推送 tags git push origin --tags

npm publish

npm publish --tag beta

@group npm publish --access public

npm publish --tag infinity

安装指定 tag

npm install rtc-sdk@latest latest 指向的版本

npm install rtc-sdk@beta beta指向的版本

修改tag 的指定版本

npm dist-tag add [email protected] latest

npm dist-tag add [email protected] beta

例如目前 latest 版本有问题,可以修改指定回退到某个版本,默认安装就会安装这个版本(也可以直接废弃)

npm dist-tag add [email protected] latest

查看tag

npm dist-tag ls rtc-sdk

npm info rtc-sdk


SVN

教程:https://www.youtube.com/watch?v=ylVz1rT7pw8

http://web.archive.org/web/20110316170621/http://www.duchnik.com/tutorials/vc/svn-command-reference
https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-cli-main.html


Husky

error Command "husky-run" not found.

解决:npx husky install