git操作

Git 常用命令与分支同步总结


一、常用 Git 命令速查

仓库初始化 / 克隆

git init                    # 初始化本地仓库
git clone <url>             # 克隆远程仓库

日常提交

git status                  # 查看当前状态
git add <file>              # 添加指定文件到暂存区
git add .                   # 添加所有改动
git commit -m "说明"         # 提交
git commit --amend          # 修改最近一次提交
git cherry-pick <commit>    # 把某个提交摘到当前分支

查看历史 / 差异

git log                     # 查看提交历史
git log --oneline --graph   # 简洁图形化历史
git diff                    # 工作区 vs 暂存区
git diff --staged           # 暂存区 vs 上次提交

分支操作

git branch                  # 查看本地分支
git branch -a               # 查看所有分支(含远程)
git switch <branch>         # 切换分支(新语法)
git switch -c <branch>      # 新建并切换
git checkout <branch>       # 切换分支(旧语法)
git checkout -b <branch>    # 新建并切换(旧语法)
git merge <branch>          # 合并分支

远程协作

git remote -v               # 查看远程地址
git fetch                   # 拉取远程所有分支更新(不合并)
git fetch origin A          # 拉取远程分支A更新(不合并)
git pull                    # 拉取远程所有分支更新并分别合并到本地分支
git pull origin A           # 拉取远程分支A更新并合并到当前本地分支
git push origin HEAD:A      # 推送当前修改(多笔修改可一起推送)到远程分支A

撤销 / 回退

git restore <file>          # 撤销工作区改动
git restore --staged <file> # 取消暂存
git reset --soft HEAD~1     # 回退最近一笔提交,保留改动在暂存区
git reset --soft commitId   # 回退到指定commitId提交,保留改动在暂存区
git revert <commit>         # 生成反向提交来撤销
git stash                   # 临时保存改动
git stash list              # 查看临时保存改动
git stash pop               # 恢复并删除暂存

二、三个典型场景

场景 1:本地在 B,想更新本地分支 A 为远程最新

git fetch origin A && git switch A && git pull --rebase origin A && git switch B

关键结论:

  • git fetch origin A 只更新 origin/A,不动本地 A
  • 如果本地 A 已存在且落后,切过去仍是旧的
  • 只有本地 A 不存在时,git switch A 才会自动以 origin/A 为起点创建

场景 2:本地在 A,想更新 A 为远程最新

git pull --rebase origin A  # 推荐,历史线性
git pull origin A           # 普通合并,产生 merge 提交

场景 3:本地在 B,想切到只有远程的 A

git fetch origin A
git switch A                # 自动创建本地 A 并跟踪 origin/A

等价老写法:

git fetch origin A && git checkout A

三、核心概念

1. 本地分支 vs 远程跟踪分支

指向哪里谁维护
origin/A远程 A 的最新提交fetch 自动更新
本地 A你本地这个分支的提交只有 commit/merge/reset/branch -f 等才会动

切分支只是切换 HEAD 指向哪个本地分支,不会同步本地分支和远程对应分支。

2. switch A / checkout A 的行为规则

本地 A远程 Agit switch Agit switch -c A
有—切过去报错(已存在)
无有自动创建并跟踪 origin/A从当前 HEAD 创建,不跟踪
无无报错从当前 HEAD 创建新分支
  • 起点 = 远程 A 的最新提交
  • 历史 = 完整保留(分支只是指针,历史通过提交父子链存在)
  • 远程和本地都没有 A 时,必须用 -c / -b 才能创建新分支

3. rebase vs merge

历史形态是否产生合并提交是否改写哈希
merge有分叉是否
rebase线性否是(只对未推送提交安全)
  • git pull = fetch + merge
  • git pull --rebase = fetch + rebase,历史更干净
  • 只对还没推送的本地提交做 rebase

4. switch vs checkout

  • switch 是 Git 2.23 引入的专用切分支命令,语义单一
  • checkout 是万能命令,同时管切分支、恢复文件、detached HEAD
  • switch 更现代、更安全;checkout 兼容性更好

四、一句话记忆

fetch 只动 origin/*,本地分支要自己 merge / rebase / 强制移动。

切分支只切 HEAD,不自动同步本地分支和远程。

本地和远程都没有的分支,必须 -c / -b 才能创建(不建议直接在本地创建分支)。


拓展:Git Rebase

重写本地未推送的提交历史,让历史干净、线性。


两个最常用命令

1. 同步远程更新(最日常)

git pull --rebase

等价于 fetch + rebase,把自己未推送的提交搬到远程最新之上,不产生多余的 merge 提交。

2. 整理本地提交

git rebase -i HEAD~3

打开编辑器,列出最近 3 个提交(旧 → 新):

pick a1b2c3d 添加登录页面
pick b2c3d4e 修复登录样式
pick c3d4e5f 补充登录测试

把想合并的行改成 squash(或 f):

pick a1b2c3d 添加登录页面
squash b2c3d4e 修复登录样式
fixup c3d4e5f 补充登录测试
动作作用
pick / p保留
squash / s合并到上一个,保留信息
fixup / f合并到上一个,丢信息
reword / r改提交信息
drop / d删除

保存退出即可,冲突时:

git add <file>
git rebase --continue

想放弃:

git rebase --abort

一条铁律

只对未推送的提交 rebase。已推送、别人可能基于它开发的提交,不要动。

强推用 git push --force-with-lease,别用 --force。


一句话记住

git pull --rebase 保持同步干净;git rebase -i 整理本地提交。仅限未推送,出错 reflog 能救。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇