Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5Mobile wallpaper 6
1946 字
10 分钟
0 次阅读
从零开始掌握 Git

基本概念#

Git文件的四种状态#

  • 未追踪(Untrack):新创建的不在版本控制之下的文件
  • 未修改(Unmodified):文件自上次提交后未修改
  • 已修改(Modified):文件已经被修改,但还没提交到暂存区
  • 已暂存(Staged):文件已修改并提交到暂存区

常见名词#

  • main:默认主分支
  • origin:默认远程仓库
  • HEAD:指向当前版本的指针
  • HEAD^:指向上一个版本
  • HEAD~n:指向上n个版本

忽略文件配置#

创建并配置名称为.gitignore的文件可以使仓库忽略一些不必要的文件。
一般来说,以下文件往往需要忽略:

  • 系统或软件自动生成的文件
  • 编译产生的中间文件和结果文件
  • 运行时生成日志文件、缓存文件、临时文件
  • 设计身份、密码、口令、秘钥等敏感信息文件

配置的文件语法与正则表达式类似,以下是一个配置文件实例:

# 忽略所有.a文件
*.a
# 跟踪所有lib.a文件,即使前面忽略了.a文件
!lib.a
# 只忽略当前目录下的TODO文件,而不忽略subdir/TODO
/TODO
# 忽略所有目录下名为build的文件
build/
# 忽略doc/NOTEs.txt,但不忽略doc/server/arch.txt
doc/*.txt
# 忽略doc/目录及其所有子目录下的.pdf文件
doc/**/*.pdf

环境配置#

ssh配置#

创建秘钥

ssh-keygen -t rsa -C '说明'

配置github公钥:在GitHub账户添加公钥,这样该账户的所有仓库均可通过公钥直接访问

测试秘钥是否正常:

ssh -T git@github.com

如果拒绝访问,在ssh配置目录下的config文件中添加以下代码即可:

Host github.com
HostName ssh.github.com
User git
Port 443

用户名邮箱配置#

初始化设置用户名和邮箱

git config --global user.name "your name"
git config --global user.email email@mail.com

查看全局配置的Git设置

git config --global --list

练习资料#

Git分支语法学习网站

分支管理和工作流模型#

  • GitFlow模型
    • main(主线/基线)分支
      • 主要分支,长期存在
      • 只接受来自hotfix和release的合并请求
      • 不允许直接push修改
    • hotfix(线上版本bug热修复分支)
      • 辅助分支,短期存在
      • 用于解决线上问题
      • 从main分支分离出来,修复完成后合并回main分支
    • develop(开发分支)
      • 主要分支,长期存在
      • 用于开发工作
    • feature(功能分支)
      • 辅助分支,短期存在
      • 从develop分支分离出来,测试稳定后合并回develop分支
    • release(预发布分支)
      • 辅助分支,短期存在
      • 用于发布前的测试和验证
      • 从develop分支分离出来,测试稳定后合并到main分支和develop中
  • 简单的GitHubFlow开发流程
    • 创建组织
    • 创建项目主仓库
    • Clone主仓库/Fork主仓库并Clone新仓库
    • 添加上游地址
    • 同步最新代码
    • 创建功能分支
    • 提交代码
    • 同步最新代码
    • 合并分支
    • 推送代码
    • 提交Pull Request
    • 讨论审核代码
    • 合并与部署
    • 删除功能分支

常用命令#

创建仓库#

在当前目录创建一个新的本地仓库

git init

下载一个远程仓库

git clone <url>

远程仓库#

将本地仓库关联到远程仓库

git remote add <origin-name> <url>

将远程仓库的所有更新下载到本地仓库,同时更新相应的远程分支指针的位置

git fetch

将远程仓库的指定分支的更新信息下载到本地仓库

git fetch <origin-name> <remote-branch-name>

将远程仓库的指定节点的更新信息下载到本地仓库,更新本地指定分支的位置

git fetch <origin-name> <remote-commit-id>:<local-branch-name>

更新当前分支关联的远程分支,然后将远程分支merge到当前分支,会遗留两个父节点信息

git pull

更新当前分支关联的远程分支,然后将当前分支rebase到远程分支,只会遗留一个父节点信息

git pull --rebase

将远程仓库的指定分支拉取到本地并进行合并

git pull <origin-name> <remote-branch-name>:<local-branch-name>

将当前分支的更新信息推送到远程仓库对应的分支

git push

将指定分支的更新信息推送到远程仓库同名分支

git push <origin-name> <branch-name>

将指定节点的更新信息推送到远程仓库指定分支

git push <origin-name> <local-commit-id>:<remote-branch-name>

查看远程仓库

git remote -v

添加和提交#

添加一个文件到仓库

git add <file>
NOTE
  • 可以使用通配符,例如:git add *.txt
  • 可以使用目录,例如:git add .

提交所有暂存区的文件到仓库

git commit -m "message"

[!attention] 直接使用git commit会进入vim编辑说明文本

提交所有已修改的文件到仓库

git commit -am "message"

修改当前节点的提交信息

git commit --amend

为指定节点添加标签

git tag <tagname> <commit-id> # commit-id默认为HEAD

撤销#

回退到指定版本

git reset <commit-id>
NOTE

该命令可指定三个参数:

  • --soft :保留当前版本的工作区和暂存区,回退到指定版本号
  • --hard:不保留当前版本的工作区和暂存区,回退到指定版本号
  • --mixed:默认参数,保留当前版本的工作区,不保留当前版本的暂存区,回退到指定版本号

在当前位置添加新的版本以抵消指定节点的更改,也就是通过添加一个节点的方式来删除节点

git revert <commit-id>

把文件从工作区和暂存区同时删除

git rm <file>
NOTE

常见的可添加参数有:

  • --cached:把文件从暂存区删除,并将文件转化为未追踪文件
  • -r:递归删除某个目录下的所有子文件和目录

将文件从暂存区移除

git restore --staged <file>

将文件尚未加入暂存区的修改全部撤销

git restore <file>

查看#

列出未新的或已修改的文件的状态

git status

查看处理版本控制下的所有文件

git ls-files

查看当前分支提交的历史版本

git log
NOTE

添加--online参数可以简化输出信息

查看分支图

git log --graph --oneline --decorate --all

查看HEAD指针的移动历史

git reflog

比较工作区和暂存区的差异

git diff

比较工作区和本地仓库的差异

git diff HEAD

比较暂存区和本地仓库的差异

git diff --cached

比较两个版本仓库之间的差异

git diff <commit-id> <commit-id>

比较两个分支之间的差异

git diff <branch-name> <branch-name>

查看所有本地分支

git branch
NOTE

当前分支前会有一个*,添加-r查看远程分支,添加-a查看所有分支

创建一个新分支

git branch <branch-name> <commit-id>
NOTE

commit-id默认为HEAD

强制改变分支指针的位置

git branch -f <branch-name> <commit-id>

创建并切换到新分支

git checkout -b <branch-name>

修改当前分支的名称

git branch -M <branch-name>

将指定分支绑定到远程分支

git branch -u <remote-branch-name> <branch-name>
NOTE

如果此时就在指定分支上,可以省略分支名

切换到指定分支

git switch <branch-name>

将指定分支合并到当前分支上

git merge <branch-name>

删除一个已经合并到其他分支上的分支

git branch -d <branch-name>

将当前分支变基到指定分支

git rebase <branch-name>

将分支2变基(接到\dots后面)到分支1

git rebase <branch-name-1> <branch-name-2>

通过交互界面重新规划指定节点的下一个节点到本节点之间的所有节点

git rebase -i <commit-id>
NOTE

交互式界面可进行如下操作:

  • 调整提交记录顺序
  • 删除某些提交
  • 合并提交

复制节点到当前位置

git cherry-pick <commit-id-1> ... <commit-id-n>
从零开始掌握 Git
https://starrainer.cn/posts/从零开始掌握git/
作者
星雨月音
发布于
2025-12-19
许可协议
CC BY-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00