Git 常用命令笔记

4 阅读6分钟

Git 常用命令笔记(补充回滚操作)

本文档按工作流程分类整理常见 Git 命令,包含示例与说明,适合日常快速查阅。


一、仓库创建与克隆

1.1 初始化新仓库

git init

说明:将当前目录初始化为 Git 仓库,生成 .git目录。

1.2 克隆完整仓库

git clone https://github.com/user/repo.git

说明:克隆远程仓库到当前目录,默认使用 origin作为远程仓库别名,并克隆所有分支。

1.3 克隆指定分支

git clone -b branch_name https://github.com/user/repo.git

说明:只克隆远程仓库的特定分支(branch_name)。


二、提交与推送

2.1 查看状态

git status

说明:查看工作区与暂存区的文件状态。

2.2 添加文件到暂存区

# 添加指定文件
git add file1.txt

# 添加所有更改(包括新文件、修改、删除)
git add .

# 添加所有修改与删除的文件,不包括新文件
git add -u

2.3 提交更改

# 提交并直接填写提交信息
git commit -m "feat: add login function"

# 提交时跳过暂存区(只提交已跟踪文件的修改)
git commit -am "fix: update config"

# 修改上一次提交的信息(未推送时)
git commit --amend

说明:

  • -m直接填写提交信息,推荐使用规范的提交信息格式。
  • -a自动添加已跟踪文件的修改,不包括新文件。
  • --amend可修改上一次提交的信息或内容,谨慎在已推送后使用。

2.4 推送至远程仓库

# 推送当前分支到远程同名分支
git push

# 推送指定分支到远程
git push origin branch_name

# 推送并设置上游分支(首次推送时常用)
git push -u origin branch_name

# 强制推送(谨慎使用,会覆盖远程历史)
git push -f

2.5 拉取更新

# 拉取远程分支并合并(相当于 fetch + merge)
git pull

# 拉取远程分支并使用变基整合
git pull --rebase

# 拉取指定远程分支
git pull origin branch_name

三、分支管理

3.1 查看分支

# 查看本地分支
git branch

# 查看所有分支(包括远程)
git branch -a

# 查看分支及最近提交
git branch -v

3.2 创建与切换分支

# 创建新分支
git branch new_branch

# 切换分支
git checkout branch_name

# 创建并切换到新分支
git checkout -b new_branch

# 切换到上一个分支
git checkout -

3.3 合并分支

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

# 使用变基整合分支(保持线性历史)
git rebase branch_name

# 合并单次提交(cherry-pick)
git cherry-pick commit_hash

说明:

  • cherry-pick可将某次提交单独应用到当前分支。
  • 变基会修改提交历史,公共分支慎用。

3.4 删除分支

# 删除本地分支
git branch -d branch_name

# 强制删除本地分支(未合并时)
git branch -D branch_name

# 删除远程分支
git push origin --delete branch_name

四、暂存、撤销与回滚

4.1 暂存当前修改

# 暂存工作区所有修改
git stash

# 暂存并添加说明
git stash save "message"

# 暂存包括未跟踪的文件
git stash -u

4.2 查看与恢复暂存

# 查看暂存列表
git stash list

# 恢复最近一次暂存并删除记录
git stash pop

# 恢复指定暂存(stash@{n})
git stash apply stash@{0}

# 删除暂存记录
git stash drop stash@{0}

# 清空所有暂存
git stash clear

4.3 撤销与回退

# 撤销工作区的修改(未 add)
git checkout -- file.txt

# 撤销暂存区的修改(已 add)
git reset HEAD file.txt

# 回退到指定提交(保留工作区)
git reset --soft commit_hash

# 回退到指定提交(清除工作区)
git reset --hard commit_hash

注意:--hard会丢弃所有未提交的更改,谨慎使用。

4.4 回滚特定提交

# 回滚单次提交(创建反向提交)
git revert commit_hash

# 回滚最近一次提交
git revert HEAD

# 回滚最近3次提交
git revert HEAD~3

# 回滚连续提交(如提交A到B之间的所有提交)
git revert commit_A^..commit_B

# 回滚合并提交
git revert -m 1 merge_commit_hash

说明:

  • git revert会创建一个新的提交来撤销指定提交的更改,不会修改历史,适合已推送到远程的提交。
  • HEAD~3表示当前分支最新的3次提交。
  • commit_A^..commit_B表示从 commit_A的下一个提交到 commit_B的所有提交。
  • -m 1用于回滚合并提交,1 表示保留主分支(被合并进来的分支)的更改。

示例

  1. 查看提交历史,找到要回滚的提交哈希:
git log --oneline
# 输出:
# a1b2c3d (HEAD -> main) feat: add new API
# e4f5g6h fix: update config
# i7j8k9l feat: initial commit
  1. 回滚特定的提交(如 e4f5g6h):
git revert e4f5g6h

这会创建一个新的提交,撤销 e4f5g6h这次提交的更改。

  1. 回滚最近的一次提交:
git revert HEAD
  1. 回滚多个提交(如最近2次提交):
git revert HEAD~2..HEAD

五、冲突处理

5.1 冲突解决流程

  1. 拉取或合并时发生冲突
git pull origin master
# 提示 CONFLICT
  1. 打开冲突文件,标记类似:
<<<<<<< HEAD
本地代码
=======
远程代码
>>>>>>> branch_name
  1. 手动编辑文件,保留需要的代码,删除标记。
  2. 标记冲突已解决:
git add resolved_file.txt
git commit -m "resolve conflict"

5.2 终止合并/变基

# 终止合并(回到合并前状态)
git merge --abort

# 终止变基
git rebase --abort

六、常用查询与配置

6.1 查看提交历史

# 简洁格式
git log --oneline

# 带分支图
git log --graph --oneline

# 查看最近3次提交
git log -3

6.2 配置信息

# 设置用户名/邮箱(全局)
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

# 查看配置
git config --list

七、常见报错与处理

报错信息可能原因解决方案
fatal: not a git repository不在 Git 仓库目录使用 git init或切换到正确目录
error: failed to push some refs远程有本地没有的新提交先执行 git pull再推送
error: Your local changes would be overwritten工作区有未提交的修改使用 git stash暂存,或提交修改
CONFLICT (content): Merge conflict合并时发生冲突手动解决冲突后 addcommit
fatal: refusing to merge unrelated histories两个独立仓库的历史不相关添加 --allow-unrelated-histories参数
error: Your local changes to the following files would be overwritten by checkout切换分支时工作区有未提交修改先提交或暂存修改

八、回滚操作总结

场景推荐命令说明
撤销工作区修改git checkout -- file未添加到暂存区
撤销暂存区修改git reset HEAD file已 add 但未 commit
撤销最近提交但保留修改git reset --soft HEAD~1回退提交,修改保留在工作区
完全撤销最近提交git reset --hard HEAD~1彻底丢弃最近一次提交
回滚已推送的提交git revert commit_hash创建反向提交,不修改历史
回滚合并提交git revert -m 1 merge_hash回滚合并,保留主分支更改
选择性回滚git cherry-pick -n commit_hash然后修改选择性地应用提交的更改

九、最佳实践提示

  1. 提交信息规范:使用清晰的前缀(如 feat:fix:docs:)。

  2. 频繁提交:小步提交,便于回退与审查。

  3. 分支策略:功能开发使用新分支,主分支保持稳定。

  4. 拉取前暂存:在不确定时,先 git stash再拉取更新。

  5. 慎用强制推送:避免在公共分支使用 git push -f

  6. 回滚选择

    • 未推送的提交:使用 git reset
    • 已推送的提交:使用 git revert
    • 团队协作时:优先使用 git revert避免历史冲突

按此笔记分类查询,可覆盖日常 Git 使用大部分场景。建议结合实际操作加深记忆,并可通过 git --help查看命令详细文档。