跳到主要内容

Git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

先简单介绍一下 Git 如何工作:它用一若干个提交(commit)节点来记录仓库历史,每个提交用唯一的哈希标识(下面的 <commit> 填的就是提交哈希)。若干个分支连在一起,就成为一条分支(branch),一个仓库(repository)可以有一个或多个分支。OS 里的仓库目录称为工作树(worktree),用户要先把工作树内的更改添加到暂存区(stage),再从暂存区创建提交(commit)。

仓库与分支管理

基本

git init # 在当前目录下创建仓库
git status # 查看仓库当前状态

clone - 克隆

git clone <url> # 从指定 url 克隆
git clone <url> <dir> # 克隆到指定目录
git clone --branch <branch> <url> # 克隆指定分支

branch - 分支

查看分支信息。

git branch # 列出所有本地分支
git branch -a # 列出所有分支 (包括远程分支)

git branch -d <branch-name> # 删除分支 (有确认)
git branch -D <branch-name> # 删除分支 (无确认!!)

checkout - 签出

签出的意思就是切换分支,本质上是移动 HEAD 指针。

git checkout <branch> # 切换分支
git checkout - # 切换到上一个分支
git checkout -b <new-branch> # 创建新分支并切换

git checkout <tag> # 签出到指定的标签
git checkout <hash> # 签出到指定的提交

push - 推送

# 推送到远程仓库
git push
git push <remote> <branch>
git push <remote> <local-branch>:<remote-branch>

git push --tags # 推送标签

git push --force # 强制推送
git push --force-with-lease # 强制推送,如果远程存在他人的提交则失败

git push --set-upstream <remote> <branch> # 推送到指定远程仓库 (并使本地分支跟踪远程分支)

git push <remote> -d <branch> # 删除远程分支

更改与回退

add - 暂存

将文件的修改添加到 Git 的暂存区,以便在下一次提交时包含这些更改。

git add <file> # 暂存某文件的更改
git add . # 暂存所有更改

commit - 提交

git commit # 创建提交 (使用默认编辑器编辑信息)
git commit -m <msg> # 创建提交并指定信息
git commit --amend # 覆盖上一个提交 (修改)

tag - 标签

git tag # 创建标签 (使用默认编辑器编辑信息)
git tag -m <msg> # 创建标签并指定信息

reset - 重置

将仓库回退到某一次提交的版本。

git reset HEAD <file> # 放弃暂存的本地更改
git reset HEAD # 放弃所有暂存的本地更改
git reset <commit> # 回退到指定提交

git reset 可以指定以下三种模式,默认是 --mixed

  • --soft :移动 HEAD,缓存区不变,工作树不变。
  • --mixed:移动 HEAD,清空缓存区,工作树不变。
  • --hard :移动 HEAD,清空缓存区,重置工作树到指定提交的状态