编辑
2025-02-11
学习
00

目录

基础操作
git add
git commit
git checkout <分支名/提交哈希>
git merge <分支名>
分支与提交操作
git rebase <目标分支>
git reset <目标提交>
git cherry-pick <提交哈希>
相对引用与 HEAD
远程仓库操作
git clone <远程仓库地址>
git fetch
git pull
git push <远程仓库> <分支名>
高级技巧
git revert <提交哈希>
强制推送 (git push -f)
其他关键概念
注意

以下是 learngitbranching.js.org 中常用 Git 指令及其用法的总结,按功能分类整理


基础操作

git add

  • 作用命令可将该文件的修改添加到暂存区。

​ 通过运行 git add 命令,你可以告诉 Git 哪些文件的修改应该包含在下一次提交(commit)中。

​ 添加一个或多个文件到暂存区:

git commit

  • 作用:提交代码变更,生成一个新的提交节点。

  • 示例

    git commit -m "提交信息"

git branch <分支名>

  • 作用:创建新分支,但不会切换到该分支。

  • 示例

    bash

    复制

    git branch feature

git branch -f <分支名> <目标位置>

  • 作用强制移动分支到指定的提交位置(覆盖原有分支指向)。

  • 场景:当需要快速调整分支到某个历史提交时使用(如修复分支指向错误)。

  • 示例

    bash

    复制

    git branch -f main HEAD~3 # 强制将 main 分支移动到 HEAD 前 3 个提交 git branch -f feature a1b2c3d # 强制将 feature 分支移动到提交 a1b2c3d
  • 注意

    • 若分支已推送到远程仓库,需配合 git push -f 强制推送(慎用)。
    • 适用于本地分支修复,避免在公共分支上强制修改历史。

git checkout <分支名/提交哈希>

  • 作用:切换到指定分支或提交(分离头指针模式)。

    git checkout main # 切换到 main 分支 git checkout a1b2c3d # 切换到某个提交

git merge <分支名>

  • 作用:将指定分支合并到当前分支,生成一个新的合并提交。

    git merge feature # 将 feature 分支合并到当前分支


分支与提交操作

git rebase <目标分支>

  • 作用:将当前分支的提交“复制”到目标分支的最新提交后,使历史线性化。

  • 示例

    bash

    复制

    git rebase main # 将当前分支变基到 main 分支

git rebase -i <目标提交>(交互式变基)

  • 作用交互式修改提交历史(如合并提交、修改提交信息、删除提交等)。

  • 场景:整理本地提交历史,使其更清晰(例如:合并多个临时提交为一个完整提交)。

  • 流程

    1. 执行命令后进入交互界面:

git rebase -i HEAD~3 # 修改最近 3 个提交 ```

2. 在编辑器中按需修改命令(如 `pick`, `squash`, `reword` 等): ``` pick a1b2c3d 提交A squash b2c3d4e 提交B # 将提交B合并到提交A reword c3d4e5f 提交C # 修改提交C的信息 ``` 3. 保存退出后,Git 会按指令逐条处理提交。
  • 常用命令

    • pick: 保留该提交
    • reword: 保留提交但修改信息
    • edit: 暂停变基,允许修改提交内容
    • squash: 合并到前一个提交,并保留提交信息
    • fixup: 合并到前一个提交,但丢弃当前提交信息
    • drop: 删除该提交
  • 注意

    • 仅用于本地未推送的提交,若已推送需强制覆盖(可能影响他人)。
    • 解决冲突后,使用 git rebase --continue 继续。

git reset <目标提交>

  • 作用:将当前分支的 HEAD 指针移动到指定提交(默认保留工作区,--hard 会丢弃变更)。

    git reset HEAD^ # 回退到上一个提交(保留修改) git reset --hard a1b2c3d # 强制回退到指定提交,丢弃后续修改

git cherry-pick <提交哈希>

  • 作用:将指定提交的变更应用到当前分支。

    git cherry-pick a1b2c3d # 应用提交 a1b2c3d 的变更


相对引用与 HEAD

  • HEAD^HEAD~1

    • 作用:表示当前提交的父提交(^ 用于分支合并后的父提交选择,~ 用于向上移动多步)。

    • 示例

      bash

      复制

      git checkout HEAD^ # 切换到父提交 git branch -f main HEAD~3 # 强制将 main 分支移动到 HEAD 前 3 个提交

远程仓库操作

git clone <远程仓库地址>

  • 作用:克隆远程仓库到本地。

git fetch

  • 作用:下载远程仓库的更新,但不自动合并到本地分支。

git pull

  • 作用:相当于 git fetch + git merge,拉取远程更新并合并到当前分支。

git push <远程仓库> <分支名>

  • 作用:将本地分支推送到远程仓库。

  • 示例

    git push origin main # 推送 main 分支到 origin

高级技巧

git revert <提交哈希>

  • 作用:创建一个新提交,撤销指定提交的变更(适合公共历史记录)。

  • 示例

    bash

    复制

    git revert a1b2c3d # 撤销提交 a1b2c3d 的变更

交互式 Rebase (git rebase -i):

  • 作用:通过交互界面修改提交历史(如合并提交、修改提交信息等)。

强制推送 (git push -f)

  • 作用:强制覆盖远程分支(慎用,可能破坏他人代码)。

其他关键概念

  • 分离头指针 (Detached HEAD):直接切换到某个提交(而非分支)时的状态,需创建分支保存更改。
  • 冲突解决:合并或变基时发生冲突,需手动编辑文件后 git add 标记为已解决。

注意

  • 合并分支git mergegit rebase(根据是否需要线性历史选择)。
  • 撤销变更
    • 未推送:git reset
    • 已推送:git revert
  • 同步远程代码git fetch + git rebase origin/main(优于直接 git pull)。