Git 常用操作笔记整理

70 阅读4分钟

一、分支 (Branch) 操作

  1. 查看分支

    • git branch:查看本地所有分支,当前分支前有 * 号。
    • git branch -v:查看分支的最后一次提交。
    • git branch -r:查看远程分支。
    • git branch -a:查看所有分支(包括本地和远程)。
  2. 创建分支

    • git branch <branch-name>:基于当前所在分支创建一个新分支。
    • git checkout -b <branch-name>创建并切换到新分支(经典用法)。
    • git switch -c <branch-name>:Git 2.23+ 推荐的创建并切换命令,更语义化。
  3. 切换分支

    • git checkout <branch-name>:切换到指定分支。
    • git switch <branch-name>:Git 2.23+ 推荐的切换命令。
  4. 推送本地分支到远程

    • git push -u origin <local-branch-name>:将本地分支推送到远程并建立追踪关系(首次推送最常用)。
    • git push origin <local-branch-name>:<remote-branch-name>:将本地分支推送到远程,并可指定不同的远程分支名。
    • git push origin <branch-name>:之后再次推送该分支的更改。
  5. 合并分支 (Merge)

    • git checkout <target-branch>:切换到要合并到的目标分支(如 mainmaster)。
    • git merge <source-branch>:将源分支(如 develop)合并到当前分支。
    • 解决冲突
      1. 冲突后,使用 git status 查看冲突文件。
      2. 手动编辑文件解决冲突。
      3. 使用 git add <file-name> 标记冲突已解决。
      4. 使用 git commit 完成合并提交。
  6. 变基分支 (Rebase)

    • git checkout <feature-branch>:切换到要变基的特性分支。
    • git rebase <base-branch>(如 main):将特性分支的修改“重新播放”到基分支的最新提交之上。
    • 解决冲突
      1. 解决冲突后 git add <file-name>
      2. 然后执行 git rebase --continue不是 git commit)。
      3. 如果想放弃变基,执行 git rebase --abort
    • ⚠️ 注意不要对已经推送到远程仓库的分支执行变基,除非你很清楚后果。
  7. 删除分支

    • 删除本地分支
      • git branch -d <branch-name>:安全删除(会检查是否已合并)。
      • git branch -D <branch-name>:强制删除(即使未合并)。
    • 删除远程分支
      • git push origin --delete <branch-name>(推荐,更直观)。
      • git push origin :<branch-name>(旧式写法,原理是推送一个空分支覆盖远程分支)。

二、标签 (Tag) 操作

  1. 查看标签

    • git tag:列出所有标签。
    • git tag -l ‘v1.0.*’:使用通配符过滤标签。
  2. 创建标签

    • git tag <tag-name>:在当前提交上打一个轻量标签
    • git tag -a <tag-name> -m “message”:创建一个带附注的标签(推荐,包含更多信息)。
  3. 推送标签

    • git push origin <tag-name>:推送单个标签到远程。
    • git push origin --tags:推送所有本地标签到远程。
  4. 删除标签

    • 删除本地标签git tag -d <tag-name>
    • 删除远程标签
      1. 先删除本地标签:git tag -d <tag-name>
      2. 再推送删除:git push origin --delete <tag-name>git push origin :refs/tags/<tag-name>
  5. 拉取/更新标签

    • git fetch --tags:从远程获取所有标签(不会删除本地已不存在的远程标签)。
    • git fetch -t -p -f:强制更新,并修剪(prune)本地已不存在的远程标签的追踪。

三、撤销与回退 (Undo & Reset)

  1. 撤销工作区修改 (未 git add)

    • git checkout -- <file-name>:丢弃指定文件的修改。
    • git restore <file-name>:Git 2.23+ 推荐的新命令。
  2. 撤销暂存区修改 (已 git add, 未 git commit)

    • git reset HEAD <file-name>:将文件从暂存区撤回到工作区。
    • git restore --staged <file-name>:Git 2.23+ 推荐的新命令。
  3. 撤销提交 (已 git commit)

    • git reset (危险,会改写历史):
      • git reset --soft <commit-id>:撤销提交,但保留更改在暂存区
      • git reset --mixed <commit-id>:默认选项,撤销提交,保留更改在工作区
      • git reset --hard <commit-id>谨慎使用!):彻底撤销提交,丢弃所有更改
      • 如果需要推送到远程,必须使用 git push --force强制推送)。
    • git revert (安全,不改写历史):
      • git revert <commit-id>:创建一个新的提交来“反做”指定提交的更改。这是撤销已推送到公共仓库的提交的最佳实践,因为它不会改变历史记录。
  4. 冲突时选择版本

    • 解决合并/变基冲突时,可以选择保留某一方的全部修改:
    • git checkout --ours <file-name>:保留当前分支的版本。
    • git checkout --theirs <file-name>:保留要合并进来的分支的版本。
    • 完成后仍需 git add 文件。

四、补丁 (Patch) 操作

  1. 生成补丁

    • git format-patch <commit>:从某个提交开始生成补丁(默认每个提交一个 .patch 文件)。
    • git format-patch -1 <commit-id>:为单个提交生成补丁。
    • git diff > change.patch:生成一个包含所有未提交更改的单一补丁文件。
  2. 应用补丁

    • git apply --check <patch-file>:检查补丁是否能干净地应用,无输出则代表可以。
    • git apply <patch-file>应用补丁(但不会创建提交)。
    • git am <patch-file>应用补丁并直接创建提交(通常用于 format-patch 生成的补丁)。
    • git am --abort:放弃应用补丁的过程。

五、其他常用操作补充

  1. 状态与日志

    • git status:查看工作区和暂存区状态。
    • git log --oneline --graph:以简洁的单行和图形化方式查看提交历史。
  2. 储藏 (Stash)

    • git stash:将当前工作区和暂存区的修改临时储藏起来。
    • git stash pop:恢复最近储藏的修改并删除储藏
    • git stash list:查看所有储藏。
  3. 远程仓库管理

    • git remote -v:查看远程仓库地址。
    • git fetch origin:从远程获取最新信息(但不会自动合并)。
    • git pull origin <branch-name>:相当于 git fetch + git merge