git 以及 git 常用指令

git 以及 git 常用指令

yjy Lv1

学习资源

GitHub - geeeeeeeeek/git-recipes: 🥡 Git recipes in Chinese by Zhongyi Tong. 高质量的Git中文教程.

history

Git 最初是由 Linux 开发者 Linus 用了仅仅两周时间纯 C 语言编写而成,在编写完成之后就立马上手接管 Linux 源代码,不过在此之前 Linux 是由 BitMover 公司开发的 BitKeeper 分布式版本控制系统所管理源代码,它是商业收费的分布式版本控制器,但 BitMover 公司看中 Linux 开源精神,免费授权给 Linux 社区使用,在 2002 年时,Linux 开始使用 BitKeeper 分布式版本控制系统管理源代码,但好景不长,有一天 Linux 社区成员 Andrew(samba(局域网共享文件 c/s 程序)的作者)试图破解 BitKeeper 共享给所有人使用,被 BitMover 公司发现并收回了免费使用的版权,随后 Linus 就用了两周时间开发出了 git (两周时间包括测试),也就是目前为止最好用的分布式版本控制系统。

大名鼎鼎的 github 用的就是 git 系统来管理它们的网站,这里需要区分一下,github 和 git 是两个东西,github 是一个社区,git 是一个服务系统,github 只支持 git 分布式系统,所以故名成为 github

differences

集中式与分布式

除了 git 还有 svn、cvs 这样的版本控制系统,它们的区别在于一个是分布式一个是集中式
集中式就是 svn 和 csv 这样的版本控制系统,分布式是 git

区别在于集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,并且如果服务器丢失了,那么所有的就都丢失了,你本机客户端仅保存当前的版本信息,换句话说,集中式就是把代码放在一个服务器上集中管理,你的所有回滚等操作都需要服务器的支持。

分布式的区别在于,每个人的电脑都是服务器,当你从主仓库拉取一份代码下来后,你的电脑就是服务器,无需担心主仓库被删或者找不到的情况,你可以自由在本地回滚,提交,当你想把自己的代码提交到主仓库时,只需要合并推送到主仓库就可以了,同时你可以把自己的代码新建一份仓库分享给其它人。

像集中式它们都有一个主版本号,所有的版本迭代都以这个版本号为主,而分布式因为每个客户端都是服务器,git 没有固定的版本号,但是有一个由哈希算法算出的 id,用来回滚用的,同时也有一个 master 仓库,这个仓库是一切分支仓库的主仓库,我们可以推送提交到 master 并合并到主仓库上,主仓库的版本号会迭代一次,我们客户端上的 git 版本号无论迭代多少次,都跟 master 无关,只有合并时,master 才会迭代一次

commands

git config

1
2
3
git config -l    #查看个人信息
git config --global user.name xxx
git config --global user.email xxx

git init

init:初始化当前目录为仓库,初始化后会自动将当前仓库设置为master, 并生成 git 配置文件. git

1
git init

git status

常看当前git状态

git branch

error

1
2
3
4
5
On branch master
Your branch and 'origin/master' have diverged,
and have 4 and 10 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean

fetch

1
2
git fetch origin
git reset --hard origin/master

pull

1
2
git rebase origin/master
git pull --rebase

git checkout

切换分支

新建分支并切换到分支

1
git checkout -b dev

rename

1
2
3
git branch -m old_name new_name
git push -u origin new_name

github 默认仓库

git diff

git add

git commit

git commit 会为我们生成 40 位的哈希值,用于作为 id,并把刚刚用 git add 添加到提交缓存区里的文件提交到本地仓库中,便于我们回滚,至此,这个文件就已经添加到本地仓库中了,同时本地仓库也迭代了一个版本

1
git commit -m "note"

commit message 规范

1
<type>(<scope>): <subject>// 空一行<body>// 空一行<footer>// 示例docs(guide): updated fixed docs from Google DocsCouple of typos fixed:- indentation- batchLogbatchLog -> batchLog- start periodic checking- missing brace
  • type: 说明 commit 类型
    1. feat: 新功能
    2. fix: bug 修复
    3. docs: 文档(documentation)
    4. style: 代码格式化,添加分号等(不影响代码运行的变动)
    5. refactor: 重构(不是新增功能也不是修改bug)
    6. test: 增加或修改测试用例
    7. chore: 构建过程或者辅助工具的变动
    8. perf: 改善性能的修改
  • scope:可选,用于说明 commit 影响的范围
  • subject:commit 目的的简单描述
  • body:可选,详细的 commit 描述
  • footer:可选,关闭的 issues 或者不兼容的变更

git commit –amend

用于改写提交

1
git commit --amend -m "xxx"

git commit –amend –no-edit

用于添加修改但不更改 commit 信息

git reset commit-id

撤销 commit, 并且将修改放回修改区

书写多行 commit message

当 Commit message 存在多行时,可以执行: git commit, 此时会进入 vim 编辑器,允许输入多行文字

修改默认 commit 编辑器

1
git config --system core.editor "neovim"    

保持清洁的Git提交记录,三招就够了

git push

1
git push -u origin master

git remote

1
git remote add origin [email protected]:michaelliao/learngit.git

bug

error: remote origin already exists.

1
git remote rm origin

git fetch / pull

git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决

bug

git问题error: remote origin already exists._git error: remote origin already exists.-CSDN博客

git rebase

[!tip] master branch merge, feature branch rebase

git merge


还在恐惧 Git 冲突? 一篇文章拯救你

git log

打印单行输出

1
git log --pretty=oneline --abbrev-commit   

tag

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。

1
2
git checkout master
git tag <name>

[!note] 默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?
方法是找到历史提交的commit id,然后打上就可以了

1
2
r
git tag <name> <common id>

标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息

还可以创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字

1
git tag -a v1.0.0 -m "Release version 1.0.0"

git tag -d <tag name>: 删除标签
git push origin <tag name>: 推送标签

[!warning] 标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签

git stash

恢复修改,并删除 stash 缓存

1
git stash pop

恢复修改,但不删除 stash 缓存

1
git stash apply

git show

1
git show <tagname>

.gitignone

注释

1
#

忽略目录

1
folder/

忽略文件

1
*.obsidian/plugins/float-search/data.json

[!warning] 一定要先删除远程仓库的内容才会生效

plugins

gitmoji

1
sudo npm i -g gitmoji-cli      

gitmoji -i 用来创建 hook, 以后用的 git commit 都会被跳转到 gitmoji,如果不想每次都 gitmoji 的话,可以不用 gitmoji -i, 而是在 commit 的时候单独使用 gitmoji -c, 并且添加后 emoji 后首字母会自动大写。

1
2
git init
gitmoji -i

如何优雅地使用 Git?
gitmoji | An emoji guide for your commit messages

Commitizen

1
sudo npm install -g commitizen

然后,在项目目录里,运行下面的命令,使其支持 Angular 的 Commit message 格式。

1
commitizen init cz-conventional-changelog --save --save-exact

conventional-changelog

1
2
3
npm install -g conventional-changelog
cd my-project
conventional-changelog -p angular -i CHANGELOG.md -w

如果你的所有 Commit 都符合 Angular 格式,那么发布新版本时, Change log 就可以用脚本自动生成(例1例2例3)。
生成的文档包括以下三个部分。

  • New features
  • Bug fixes
  • Breaking changes.

每个部分都会罗列相关的 commit ,并且有指向这些 commit 的链接。当然,生成的文档允许手动修改,所以发布前,你还可以添加其他内容。
上面命令不会覆盖以前的 Change log,只会在CHANGELOG.md的头部加上自从上次发布以来的变动。

如果你想生成所有发布的 Change log,要改为运行下面的命令。

1
conventional-changelog -p angular -i CHANGELOG.md -w -r 0 

为了方便使用,可以将其写入package.jsonscripts字段。

1
2
3
4
5
{
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
}
}

以后,直接运行下面的命令即可。

1
npm run changelog

conventional-changelog

[[github]]

[[git flow]]

gitea

bug

报错 gnutls_handshake() failed: The TLS connection was non-properly terminated.

因为代理设错了,我的 clash 设置的 https 和 http 的地址是一样的,但是我 export https://xxx, 导致连接不上,将其改为 export http:// 即可


如何使用git从github拉取自己的私有仓库(Token方式、本地秘钥方式)_git自己的私人仓库怎么拉取-CSDN博客
关于Git这一篇就够了_git push origin –delete-CSDN博客

管理修改 - Git教程 - 廖雪峰的官方网站
git fetch & pull详解 - Runner_Jack - 博客园

[!info] vscode 上传项目到 github_vscode 上传代码到 github-CSDN 博客
文章浏览阅读 1.
https://blog.csdn.net/m0_51185558/article/details/126181439?ops_request_misc=%7B%22request%5Fid%22%3A%22170961116516800226558506%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=170961116516800226558506&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-126181439-null-null.142^v99^pc_search_result_base9&utm_term=vscode与github&spm=1018.2226.3001.4187

[!info] 场景二:Git 远程版本库的基本用法_git 库克隆后怎么看版本-CSDN 博客
文章浏览阅读 579 次。通过克隆远程版本库从而在本地创建了一个版本库,这时就可以参照场景一的本地版本库基本用法,执行查看工作区的状态、暂存更改的文件、把暂存区提交到仓库,以及回到过去、回到未来等本地版本控制的基本操作。这时本地仓库的提交项是领先于远程仓库的,只需要通过 git push 将本地仓库中的提交项推送到远程仓库,即可完成本地仓库和远程仓库的同步。执行 git remote -v 命令可以查看更详细的远程存储库信息,包括抓取(fetch)的远程存储库 URL 和推送(push)的远程存储库的 URL。_git 库克隆后怎么看版本
https://blog.csdn.net/weixin_43844521/article/details/129472996?ops_request_misc=%7B%22request%5Fid%22%3A%22170961312916800227451526%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=170961312916800227451526&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-129472996-null-null.142^v99^pc_search_result_base9&utm_term=远程存储库名称&spm=1018.2226.3001.4187

[!info] git 上传步骤_git 怎么上传-CSDN 博客
文章浏览阅读 1.
https://blog.csdn.net/qq_45083936/article/details/117327824?ops_request_misc=%7B%22request%5Fid%22%3A%22171066713816800185860713%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=171066713816800185860713&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-117327824-null-null.142^v99^pc_search_result_base6&utm_term=上传git&spm=1018.2226.3001.4187

  • Title: git 以及 git 常用指令
  • Author: yjy
  • Created at : 2025-01-17 18:00:00
  • Updated at : 2025-01-17 17:14:58
  • Link: https://yjy.us.kg/git/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments