跳转至

git 命令

Git 是一个分布式版本控制系统,用于跟踪文件的更改,并允许多个开发者协同工作。以下是一些常用的 Git 命令及其详细解释:

1. 配置类命令

git config

  • 作用: 配置 Git 的设置,比如用户名、邮箱等。
  • 示例: bash git config --global user.name "Your Name" git config --global user.email "you@example.com" 这个命令会设置全局的用户名和邮箱信息,这些信息会附加到每次提交中。

2. 创建和克隆仓库

git init

  • 作用: 在当前目录中初始化一个新的 Git 仓库。
  • 示例: bash git init 这个命令会在当前目录下创建一个 .git 目录,初始化一个新的 Git 仓库。

git clone

  • 作用: 克隆一个远程仓库到本地。
  • 示例: bash git clone https://github.com/user/repository.git 这个命令会下载指定的仓库到当前目录,并创建一个与远程仓库关联的本地仓库。

3. 基本操作命令

git add

  • 作用: 将文件的更改添加到暂存区(Staging Area)。
  • 示例: bash git add filename git add . git add filename 将指定文件添加到暂存区,git add . 将当前目录下的所有更改添加到暂存区。

git commit

  • 作用: 将暂存区的内容提交到本地仓库。
  • 示例: bash git commit -m "Commit message" 这个命令会将暂存区的所有内容提交,并附带一条提交信息。

git status

  • 作用: 查看工作区、暂存区的状态,包括哪些文件发生了修改,哪些文件已被暂存。
  • 示例: bash git status

git log

  • 作用: 查看仓库的提交历史。
  • 示例: bash git log 可以看到所有的提交记录,包括提交的哈希值、作者、日期和提交信息。

git diff

  • 作用: 显示文件的更改内容。
  • 示例: bash git diff 这个命令会显示当前工作区与暂存区之间的差异。如果使用 git diff HEAD,则显示工作区与最后一次提交之间的差异。

4. 分支管理

git branch

  • 作用: 管理分支。
  • 示例: bash git branch # 列出所有本地分支 git branch new-branch # 创建新分支

git checkout

  • 作用: 切换到指定分支或恢复工作区文件。
  • 示例: bash git checkout branch-name # 切换到某个分支 git checkout -b new-branch # 创建并切换到新分支

git merge

  • 作用: 合并分支。
  • 示例: bash git merge branch-name 这个命令会将指定分支合并到当前分支。

5. 远程操作

git remote

  • 作用: 管理远程仓库。
  • 示例: bash git remote -v # 查看当前配置的远程仓库 git remote add origin https://github.com/user/repository.git # 添加远程仓库

git fetch

  • 作用: 从远程仓库获取最新的更新,不合并到当前分支。
  • 示例: bash git fetch origin 这个命令会从远程仓库下载最新的内容,但是不会自动合并到当前分支。

git pull

  • 作用: 从远程仓库获取更新并自动合并到当前分支。
  • 示例: bash git pull origin branch-name 相当于执行了 git fetchgit merge

git push

  • 作用: 将本地分支的提交推送到远程仓库。
  • 示例: bash git push origin branch-name 将当前分支的提交推送到远程仓库的指定分支。

6. 撤销操作

git reset

  • 作用: 回滚到某个提交,可以修改暂存区和工作区的内容。
  • 示例: bash git reset --soft HEAD~1 # 回滚到上一个提交,保留暂存区和工作区的修改 git reset --hard HEAD~1 # 回滚到上一个提交,丢弃暂存区和工作区的修改

git revert

  • 作用: 撤销某次提交,生成一个新的提交。
  • 示例: bash git revert commit-id 这个命令会生成一个新的提交,内容是对指定提交的撤销。

7. 标签管理

git tag

  • 作用: 给某次提交打标签。
  • 示例: bash git tag v1.0 # 给当前提交打标签 git tag -a v1.0 -m "Version 1.0" # 创建带注释的标签 git push origin v1.0 # 推送标签到远程仓库

总结

Git 命令提供了丰富的功能来管理代码的版本控制,从基本的提交、分支管理到远程操作和撤销操作。通过这些命令,开发者可以高效地跟踪代码变化、协同工作并维护代码的历史记录。

8. 变基

git rebase 是 Git 中一个强大的命令,用于重新应用一系列提交。与 git merge 不同,git rebase 可以通过将提交的基底(base)改变到另一分支上,从而使提交历史更加线性和干净。下面是对 git rebase 的详细讲解,包括常见用法和一些重要概念。

1. 基本概念

  • Rebase 的基本思路: 将一系列提交“移动”到另一分支的顶部。这样,你的提交历史就像是在目标分支上重新生成的。
  • 目标: 通过 rebase,你可以保持项目历史的线性,避免在历史中引入过多的合并提交。

2. 基本用法

1. 基础 Rebase
  • 命令: git rebase <base-branch>
  • 用途: 将当前分支的提交“重新应用”到 <base-branch> 的最新提交上。
  • 示例: bash git checkout feature-branch git rebase main 这个命令会将 feature-branch 上的所有提交应用到 main 分支的最新提交上。
2. 交互式 Rebase
  • 命令: git rebase -i <commit>
  • 用途: 允许你对提交进行更详细的操作,比如重排序、修改、合并提交等。
  • 示例: bash git rebase -i HEAD~3 这个命令会打开一个编辑器,让你可以查看并修改最近的 3 个提交。

3. 处理冲突

在 Rebase 过程中,如果遇到冲突,Git 会暂停并要求你解决这些冲突。

  • 查看冲突: bash git status

  • 解决冲突: 手动编辑文件解决冲突,然后使用 git add 添加解决后的文件。

  • 继续 Rebase: bash git rebase --continue

  • 中止 Rebase: 如果你决定中止 Rebase,可以使用: bash git rebase --abort

4. 常见选项

  • -i--interactive: 进行交互式 Rebase,允许你修改提交。
  • --onto <newbase>: 重新基于新的基底进行 Rebase。
  • --continue: 继续 Rebase 过程中的下一步操作。
  • --abort: 中止 Rebase 并恢复到 Rebase 之前的状态。

5. 示例

1. 将 feature 分支的提交应用到 master 分支

假设你在 feature 分支上进行了一些提交,现在你想将这些提交移动到 master 分支上:

git checkout feature
git rebase master

这样会把 feature 分支的提交重新应用到 master 分支的顶部。

2. 交互式 Rebase 来整理提交

假设你想要整理最近的 5 个提交:

git rebase -i HEAD~5

在打开的编辑器中,你可以选择以下操作: - pick: 保持提交 - reword: 修改提交信息 - edit: 修改提交内容 - squash: 合并提交 - fixup: 合并提交并丢弃提交信息 - drop: 删除提交

6. 优缺点

  • 优点:
  • 线性历史: Rebase 可以使提交历史保持线性,便于理解。
  • 清晰的历史: 通过 Rebase 整理提交,可以使历史记录更加干净和有序。

  • 缺点:

  • 风险: 如果在公共分支上执行 Rebase,可能会导致其他开发者的历史变得复杂。最好只对自己的私有分支执行 Rebase。

总结

git rebase 是一个强大的工具,用于重写提交历史和维护线性历史。通过掌握 git rebase 的使用,你可以更加灵活地管理 Git 仓库的历史记录,并且保持代码库的整洁。在使用 rebase 时要特别注意处理冲突和了解它对历史的影响,以避免潜在的问题。