一、分支 (Branch) 操作
-
查看分支
git branch:查看本地所有分支,当前分支前有*号。git branch -v:查看分支的最后一次提交。git branch -r:查看远程分支。git branch -a:查看所有分支(包括本地和远程)。
-
创建分支
git branch <branch-name>:基于当前所在分支创建一个新分支。git checkout -b <branch-name>:创建并切换到新分支(经典用法)。git switch -c <branch-name>:Git 2.23+ 推荐的创建并切换命令,更语义化。
-
切换分支
git checkout <branch-name>:切换到指定分支。git switch <branch-name>:Git 2.23+ 推荐的切换命令。
-
推送本地分支到远程
git push -u origin <local-branch-name>:将本地分支推送到远程并建立追踪关系(首次推送最常用)。git push origin <local-branch-name>:<remote-branch-name>:将本地分支推送到远程,并可指定不同的远程分支名。git push origin <branch-name>:之后再次推送该分支的更改。
-
合并分支 (Merge)
git checkout <target-branch>:切换到要合并到的目标分支(如main或master)。git merge <source-branch>:将源分支(如develop)合并到当前分支。- 解决冲突:
- 冲突后,使用
git status查看冲突文件。 - 手动编辑文件解决冲突。
- 使用
git add <file-name>标记冲突已解决。 - 使用
git commit完成合并提交。
- 冲突后,使用
-
变基分支 (Rebase)
git checkout <feature-branch>:切换到要变基的特性分支。git rebase <base-branch>(如main):将特性分支的修改“重新播放”到基分支的最新提交之上。- 解决冲突:
- 解决冲突后
git add <file-name>。 - 然后执行
git rebase --continue(不是git commit)。 - 如果想放弃变基,执行
git rebase --abort。
- 解决冲突后
- ⚠️ 注意:不要对已经推送到远程仓库的分支执行变基,除非你很清楚后果。
-
删除分支
- 删除本地分支:
git branch -d <branch-name>:安全删除(会检查是否已合并)。git branch -D <branch-name>:强制删除(即使未合并)。
- 删除远程分支:
git push origin --delete <branch-name>(推荐,更直观)。git push origin :<branch-name>(旧式写法,原理是推送一个空分支覆盖远程分支)。
- 删除本地分支:
二、标签 (Tag) 操作
-
查看标签
git tag:列出所有标签。git tag -l ‘v1.0.*’:使用通配符过滤标签。
-
创建标签
git tag <tag-name>:在当前提交上打一个轻量标签。git tag -a <tag-name> -m “message”:创建一个带附注的标签(推荐,包含更多信息)。
-
推送标签
git push origin <tag-name>:推送单个标签到远程。git push origin --tags:推送所有本地标签到远程。
-
删除标签
- 删除本地标签:
git tag -d <tag-name> - 删除远程标签:
- 先删除本地标签:
git tag -d <tag-name> - 再推送删除:
git push origin --delete <tag-name>或git push origin :refs/tags/<tag-name>
- 先删除本地标签:
- 删除本地标签:
-
拉取/更新标签
git fetch --tags:从远程获取所有标签(不会删除本地已不存在的远程标签)。git fetch -t -p -f:强制更新,并修剪(prune)本地已不存在的远程标签的追踪。
三、撤销与回退 (Undo & Reset)
-
撤销工作区修改 (未
git add)git checkout -- <file-name>:丢弃指定文件的修改。git restore <file-name>:Git 2.23+ 推荐的新命令。
-
撤销暂存区修改 (已
git add, 未git commit)git reset HEAD <file-name>:将文件从暂存区撤回到工作区。git restore --staged <file-name>:Git 2.23+ 推荐的新命令。
-
撤销提交 (已
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>:创建一个新的提交来“反做”指定提交的更改。这是撤销已推送到公共仓库的提交的最佳实践,因为它不会改变历史记录。
-
冲突时选择版本
- 解决合并/变基冲突时,可以选择保留某一方的全部修改:
git checkout --ours <file-name>:保留当前分支的版本。git checkout --theirs <file-name>:保留要合并进来的分支的版本。- 完成后仍需
git add文件。
四、补丁 (Patch) 操作
-
生成补丁
git format-patch <commit>:从某个提交开始生成补丁(默认每个提交一个.patch文件)。git format-patch -1 <commit-id>:为单个提交生成补丁。git diff > change.patch:生成一个包含所有未提交更改的单一补丁文件。
-
应用补丁
git apply --check <patch-file>:检查补丁是否能干净地应用,无输出则代表可以。git apply <patch-file>:应用补丁(但不会创建提交)。git am <patch-file>:应用补丁并直接创建提交(通常用于format-patch生成的补丁)。git am --abort:放弃应用补丁的过程。
五、其他常用操作补充
-
状态与日志
git status:查看工作区和暂存区状态。git log --oneline --graph:以简洁的单行和图形化方式查看提交历史。
-
储藏 (Stash)
git stash:将当前工作区和暂存区的修改临时储藏起来。git stash pop:恢复最近储藏的修改并删除储藏。git stash list:查看所有储藏。
-
远程仓库管理
git remote -v:查看远程仓库地址。git fetch origin:从远程获取最新信息(但不会自动合并)。git pull origin <branch-name>:相当于git fetch+git merge。