跳到主要内容

Git使用指南

本文梳理 Git 在日常项目中的常用操作、冲突排查思路以及合并与清理命令,便于快速查阅。

常规工作流​

  • 配置身份:
    git config --global user.name "Your Name"
    git config --global user.email "you@example.com"
  • 获取代码:
    git clone <repo-url>
    git pull --rebase
  • 查看状态:
    git status
  • 提交改动:
    git add <file|.>
    git commit -m "feat: message"
    git push origin <branch>
  • 忽略文件:
    git status --ignored

分支与合并​

  • 创建分支:
    git switch -c feature/login
    git checkout -b feature/login
  • 切换分支:
    git switch develop
  • 查看分支:
    git branch -vv
    git branch -r
  • 合并分支:
    git switch develop
    git merge --no-ff feature/login
    --no-ff 能保留合并记录;如不需要,省略即可。
  • 删除分支:
    git branch -d feature/login
    git branch -D feature/login
  • 删除远程分支:
    git push origin --delete feature/login

查看历史与回滚​

  • 提交历史:
    git log --oneline --graph --decorate
  • 查看差异:
    git diff
    git diff --cached
    git show <commit>
  • 撤销提交:
    git revert <commit>
    git reset --soft <commit>
    git reset --hard <commit>
    git revert 会生成新的提交以撤销改动;git reset 仅在本地回退,其中 --hard 会丢弃工作区与暂存区改动。
  • 暂存现场:
    git stash push -m "wip"
    git stash pop

解决冲突的流程​

  1. 识别冲突文件:
    git status
  2. 查看差异:
    git diff
    git diff --theirs <file>
    git diff --ours <file>
    git mergetool
  3. 编辑文件:手动合并 <<<<<<<, =======, >>>>>>> 标记处的内容,确保逻辑正确。
  4. 验证:运行测试或构建,确认合并结果正确。
  5. 标记解决:
    git add <conflicted-file>
  6. 继续流程:
    git commit # 合并场景
    git merge --continue # 合并手动中断后继续
    git rebase --continue # Rebase 场景

冲突处理常用命令​

  • 放弃当前合并:
    git merge --abort
  • 放弃当前 rebase:
    git rebase --abort
  • 选择某一侧改动:
    git checkout --theirs <file>
    git restore --source=MERGE_HEAD <file>
    git checkout --ours <file>
    git restore --source=HEAD <file>

合并策略与注意事项​

  • 保持同步:
    git fetch origin
    git pull --rebase
  • 原子提交:一个提交只包含一项逻辑修改,冲突时更易定位。
  • 提交信息规范:遵循团队约定(如 Conventional Commits),便于历史检索。
  • 提交前检查:
    git status
    git diff

清理与维护​

  • 删除未跟踪文件:
    git clean -fd
    git clean -fdn
  • 修剪远程引用:
    git remote prune origin
  • 压缩提交:
    git rebase -i <base-commit>
  • 查看贡献统计:
    git shortlog -sn
    git blame <file>

常见命令速查​

  • 更新远程地址:
    git remote set-url origin <new-url>
  • 查看远程:
    git remote -v
  • 仅拉取不合并:
    git fetch origin main
  • 推送标签:
    git push origin v1.2.3
    git push origin :refs/tags/v1.2.3
  • 创建标签:
    git tag v1.2.3
    git tag -a v1.2.3 -m "Release"

处理推送被拒:远程已有新提交​

git push origin main
# error: failed to push some refs (non-fast-forward)

# 推荐流程:拉取后重放
git pull --rebase origin main
git push origin main

# 或:先 fetch 再手动 rebase
git fetch origin
git rebase origin/main
git push origin main

# 若 rebase 冲突
git status
git add <file>
git rebase --continue
git push origin main

# 放弃 rebase
git rebase --abort
信息

根据团队规范选择合适的合并策略(Merge、Squash、Rebase),并在冲突时保持冷静,逐步定位问题即可确保仓库历史整洁可靠。