Git

Github文档:

https://docs.github.com/zh/get-started/git-basics/setting-your-username-in-git

可视化管理工具

  • sublime merge
  • sourcetree

Github 项目点击键盘句号( . )可进入在线编辑

  1. 工作目录 (Working Directory)
  2. 暂存区 (Staging Area / Index)
  3. 本地仓库 (Local Repository)

注册

配置用户信息

git config --global user.name "runoob"
git config --global user.email test@runoob.com

查看配置信息

git config --list

查询配置信息

git config user.name

创建和克隆

初始化

git init

克隆

git clone <repo> <directory>

git clone https://github.com/juliangarnier/anime.git

提交

提交到暂存区

git add .

可以通过 git status 查看现在的状态

提交到本地仓库

git commit -m "第一次提交"

撤销

撤销工作目录修改(旧版:git checkout .

暂存区的内容来覆盖工作区

git restore .

git reset 的三种模式

  1. --soft:仅重置提交记录,保留暂存区和工作区的更改。
  2. --mixed(默认模式):重置提交记录和暂存区,但保留工作区的更改。
  3. --hard:重置提交记录、暂存区和工作区,所有更改都会丢失。

撤销最后一次暂存区修改,保留工作目录中的修改

git reset HEAD

撤销最后一次暂存区修改,清空工作目录中的修改。(用版本库(HEAD)的内容来覆盖暂存区和工作区)

git reset --hard HEAD

撤销最后一次本地仓库修改,修改退回至暂存区

git reset --soft HEAD~1

撤销最后一次本地仓库修改,修改退回至工作目录

git reset --mixed HEAD~1

回退到一个特定的提交, HEAD 改成 提交哈希值 

通过 git log 查看到的提交 ID,例如 a1b2c3d4

从暂存区恢复单个文件

git reset 00b6938c5057eccc0ee1ddd70698e0231770c26 -- src/example.txt

远程仓库

在Github上创建空的远程仓库

添加目标仓库地址

git remote add origin https://github.com/xxx/xxx.git

由于Github在2021年8月13日取消了对密码身份验证的支持,从而转用个人访问令牌创建

Github:Settings->Developer settings->Personal access token->Tokens(classic)

推送

git push -u origin "master"

git push

拉取

git pull

查看全部远程仓库

git remote -v

git remote show origin

删除仓库

git remote rm origin

git remote remove origin

修改远程仓库的 Push 和 Fetch URL

git remote set-url --push origin https://github.com/username/new-repo.git
git remote set-url --fetch origin https://github.com/username/old-repo.git

重命名远程仓库(默认书签名称 origin 改成 krjojo)

git remote rename origin krjojo

分支与合并

查看分支列表

git branch -a

创建和删除分支

git branch release

git branch -d release

切换分支

git switch release

git merge

合并分支(在 master 合并 release 分支)

release > master

git merge release

git merge --no-ff release

git merge 有两种主要的合并策略:

  1. Fast-Forward (快进模式)
    • 默认行为的一种。如果 master 分支在 release 分支创建后没有任何新的提交,Git 会简单地将 master 分支的指针直接移动到 release 分支的最新提交上。这个过程非常快,因为它不创建新的合并提交,合并后的历史记录是一条直线,看不出曾经有过分支。
  2. No-Fast-Forward (--no-ff) (非快进模式)
    • 使用 --no-ff 参数会强制 Git 创建一个合并提交。

git rebase

变基

将功能分支上的所有提交“重新播放”到目标分支的最新提交之上,最终形成一条完全线性的提交历史。

不要对已经推送到公共仓库的分支进行 rebase,因为它会重写提交历史,给其他协作者带来麻烦。

合并分支(在 release 里合并到 master 分支)

release > master

git rebase master

冲突

使用 git status 查看哪些文件发生了冲突。

<<<<<<< HEAD======= 之间是当前分支 (master) 的代码。

=======>>>>>>> release 之间是你要合并进来的分支 (release) 的代码。

解决完所有文件的冲突后,使用 git add 命令表示完成。

中止合并

mergegit merge --abort

rebasegit rebase --abort

Tag标签管理

轻量标签(Lightweight)

给哈希值命名,git log 查看哈希值

git tag v1.0-light

附注标签(Annotated)

存储在 Git 数据库中的完整对象,拥有自己的元数据。

  • 包含标签的创建者、创建日期和电子邮件。
  • 可以为标签添加一段说明文字(tagging message),解释这个标签的意义。
  • 可以使用 GPG (GNU Privacy Guard) 进行数字签名,确保标签的真实性和完整性。
git tag -a <tag-name> -m "你的附注信息"

git tag -a v1.0

git tag -a v1.0 -m "Release version 1.0"

为过去的提交打标签

git tag -a v0.9 -m "This is the release for version 0.9" f8e5b8a

管理

列出所有标签

git tag

通配符进行筛选:

git tag -l "v1.*"

查看标签详情

git show v1.0

将标签推送到远程仓库(单个+全部)

git push origin v1.0

git push origin --tags

删除标签(本地+远程)

git tag -d v1.0

git push origin --delete v1.0
# 旧版 git push origin :refs/tags/v1.0

常用命令 

当前状态

git status

比较暂存区和工作区差异(查看未提交暂存区的内容)

git diff

提交历史(q退出)

git log

常见问题 

添加了.gitignore 但是不生效

git rm -r --cached .
git add .
最后更新于 2025年6月27日