Git 常用命令整理
status
Published
type
Post
slug
git-commands
date
Aug 25, 2022
tags
DevOps
Git
Shell
summary
Git 是一款代码版本控制工具,常用于团队协作开发。本文主要是整理的一些常见的 Git 命令,这些命令覆盖了 Git 常用的操作场景,可以帮助开发者更好地使用 Git 进行版本控制和协作开发。
Git 作为代码版本控制工具,也是要经常打交道的存在。虽然在各类 IDE 中已经将其大部分操作实现了很好的图形化用户交互,但命令行作为与 Git 打交道的基础,还是不可或缺。在此将常用的一些场景命令整理一下。
Local repository
# 初始化本地仓库 git init # 添加当前路径下所有文件到暂存区 git add . # 提交修改到本地仓库 git commit -m "Add Readme.md"
Remote repository
# 添加远程仓库地址,地址形如:https://github.com/example/project.git git remote add origin <远端仓库地址> # 推送本地 master 分支到远程仓库 git push -u origin master
.gitignore
# 于 git 项目根目录下创建 .gitignore 文件,在其中写入需要忽略的文件 *.log node_modules/
Branch
# 从远程仓库拉取(clone)项目至本地 git clone <远端仓库地址> # 进入项目目录,创建并切换至新分支 develop git checkout -b develop # 删除本地分支 git branch -d develop # 删除远程仓库 develop 分支 git push origin --delete develop
Merge
- 无冲突
# 切换回 master 分支 git checkout master # 将 develop 分支合并到 master git merge develop # 推送 master 分支到远程仓库 git push origin master
- 有冲突
# 拉取远程 master 分支,更新至最新代码 git pull origin master # 将 master 分支合并至 develop 分支 git merge master # 此时会提示冲突,逐个文件解决,编辑保存 # 添加文件至暂存区 git add . # 提交冲突修改 commit git commit -m "Fix conflict" # 推送 develop 分支至远程仓库 git push origin develop
Rebase
# 假定在 develop 分支 git checkout develop # 将此分支 rebase 到 master 分支 git rebase master # 强制推送至远程仓库 git push -f origin develop # 切回 master 分支 git checkout master # 合并 develop 至 master git merge develop # 推送 master 至远程仓库 git push origin master
比较项 | rebase | merge |
定义 | 把自己的分支变基到目标分支上,提交历史放在目标分支最后 | 把目标分支合并到自己分支上,提交历史合并成一个新的提交 |
原理 | 1. 检出当前分支
2. 临时保存当前分支的提交历史
3. 检出base分支
4. 将当前分支的提交逐个添加到base分支上
5. 检出当前分支
6. 将临时保存的提交历史删除,改为指向rebase后的提交 | 1. 检出当前分支
2. 合并base分支到当前分支,生成一个merge提交 |
提交历史 | 简洁线性,所有提交按时间排列 | 保留完整分支历史,存在merge提交 |
优点 | 清晰可读的历史,方便代码审查 | 保留完整提交历史,易追溯变更 |
缺点 | 改写提交历史,可能导致冲突 | 多merge提交,历史复杂难读 |
使用场景 | 私有分支开发和维护 | 公共分支开发和合作 |
Tag
# 基于当前分支代码打上一个标签,名为 v0.1 git tag v0.1 # 推送标签至远程仓库 git push origin v0.1
Reset
# 回退到3个版本前的代码, 有多种 reset 模式,视情况而定 git reset HEAD~3 # 查看当前仓库修改状态 git status git add . git commit -m "fix something" # 强制推送至远端仓库 git push -f origin master
Reflog
# 查看所有提交记录 git reflog # 强制回退当前代码至相应版本 git reset --hard <commit ID> # 基于指定的版本创建新分支 git checkout -b new_develop <commit ID> git push origin new_develop
Revert
# 查看提交历史 git log # 回滚到指定的提交 git revert <commit ID> # 推送至远程 git push origin master
Stash
# 暂存当前分支的修改 git stash # 切到 master git checkout master # 拉取更新 git pull origin master # 创建热修复分支 git checkout -b hotfix # 修复bug,提交,切回 master git checkout master # 将 hotfix 分支合并进 master git merge hotfix git push origin master git branch -d hotfix # 切回 develop 分支 git checkout develop # 恢复暂存的修改内容 git stash pop # 查看暂存修改列表 git stash list # 恢复指定的修改 git stash apply stash@{1}
Commit
# 在刚刚提交的提交中发现问题并修改,不想产生新的提交 git add . # 修改最近的提交 git commit --amend # 强制推送 git push -f origin master
Chery-pick
# 查看提交历史 git log # 切到 master git checkout master # 将指定提交捡(复制)来当前分支 git cherry-pick <commit ID> # 推送到远程 git push origin master