GIT常用命令
前言
这里列举常见场景,并给出相应解决方案
约定: 下文代码块中${}
里面表示的是变量,具体值视情况而定,其余的都是正确可执行的命令。
配置
Mac/Linux 用户 执行以下操作
vi ~/.gitconfig
Windows用户在桌面用户文件夹下有个.gitconfig隐藏文件,直接修改即可
补充以下内容
[alias]
st = status
cm = commit
br = branch
co = checkout
ps = push
增强
Mac或Linux用户,推荐安装https://github.com/robbyrussell/oh-my-zsh,增强命令行体验。
本地提交
取消未暂存的修改
# 恢复单个文件
git checkout -- ${file}
# 恢复目录下所有文件
git checkout -- .
取消add
git reset HEAD
取消提交
git reset HEAD^1
或者
# 查看提交的hash
git log
# 使用相应的hash回滚
git reset ${hash}
修正提交
适用于提交信息有误或有遗漏,需要修正最新提交信息的场景。
git commit --amend
stash修改
适用于当前功能开发并不完整,不能产生一次提交,但却要开发另外功能的场景
git stash save '${msg}'
恢复stash
git stash pop
分支管理
创建分支
git checkout -b ${branch}
# 根据commit hash 创建分支
git checkout -b ${branch} ${commit_hash}
查看远程分支
git branch --remote
# 或者
git branch -r
如果上述命令看不到所有的远程分支,可以使用以下命令
git ls-remote --heads
根据远程分支创建分支
# 保证分支信息拉取下来
git pull
# 查看远程分支信息
git branch -r
# 创建会追踪远程分支的本地分支
git checkout -t origin/${branch}
注意上面的完整命令为
git checkout -b ${local_branch} -t origin/${branch}
可以省略 -b ${local_branch}
创建干净历史分支
git checkout --orphan ${branch}
删除分支
# 删除本地分支
git branch -d ${local_branch}
# 删除远程分支
git push origin -d ${remote_branch}
# 或
git push origin :${remote_branch}
标签管理
新建本地标签
git tag ${tag_name}
删除本地标签
git tag -d ${tag_name}
查看本地所有标签
git tag -l
推送本地标签
git push origin ${tag_name}
# 推送所有标签
git push origin --tags
# 同时推送提交记录以及本分支的所有标签
git push --follow-tags
获取远程标签
git fetch origin tag
删除远程标签
git push origin -d tag ${tag_name}
远程仓库
浅克隆
适用于仓库很大,对过往历史不关心,想快速克隆的场景。
git clone --depth=1 ${repo_url}
克隆指定分支
适用于只想要某一分支代码的场景。
git clone -b ${branch} ${repo_url}
强行推送
适用于本地开发了一段时间,最近才在代码托管平台上初始化远程仓库的场景
# 谨慎:本地master分支会覆盖远程master分支!
git push --force
取消错误的推送
适用于推送了错误的提交后, 想取消该推送的场景
# 更新代码
# 一定要更新最新的代码! 以免覆盖掉其他协作者的推送!
git pull
# 查看提交的hash
git log
# 使用相应的hash回滚
# 注意: 回滚后 在${hash}之后提交的代码 都会在 Changes to be committed 中
git reset ${hash}
# 覆盖远程仓库的代码
git push --force
高级
cherry-pick
1.checkout目标分支(target branch)
2.在源分支(source branch)获取revision number
3.开始cherry-pick
输入命令
git cherry-pick df2612cf167ebaf5e743042477942b95bf15f33d b910c946f8d3dedbb33c2478fceda53867e77000 0737f6f4eb35cf79a3d775f7e05f39a2e1bd65d9 f99c68db44102f28a2a3652103ad94733092c788 9c5cba2ac3ba9b9870d57ac8a59d83333b6a3623 2659bfeae32bd3ca6a574669359248e631e750fd 4d7fa72438d20d1c5917dc9b234d90ea791fd7c5
4.解决冲突
如果遇到冲突,会提示,解决冲突后
git add ${冲突的文件}
5.继续cherry-pick
之后会提示,继续操作
git cherry-pick --continue
如再遇到冲突,重复4,5
6.结束
merge unrelated histories
可以使用 --allow-unrelated-histories
git merge --allow-unrelated-histories
git pull origin ${branch} --allow-unrelated-histories
根据文件搜索历史
git log --all --full-history -- package-lock.json
从所有提交中删除一个文件
git filter-branch --tree-filter "rm -rf package-lock.json" --prune-empty -- --all
如果代码已经推送到了远程仓库,还需要强制推送
git push -f
其他
记住账号密码
# 输入下列命令后,再输入一次账号密码即可
git config --global credential.helper store