本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2022-02-19
# 查看分支
git branch
# 创建分支
git branch <name>
# 切换分支
git checkout <name>
# 创建并切换分支
git checkout -b <name>
# 根据某个commit创建分支
git checkout <commit_id> -b <name>
# 根据远程分支创建本地分支
git checkout -b dev origin/dev
# 将本地dev分支推送到origin并创建origin/dev分支 (远程没有dev分支)
# 本地分支名:远程分支名
git push origin dev:dev
# 强制push
git push origin dev -f
# 推送并建立tracking
# 推送到远程同名分支my-dev(远程没有的话会自动创建)并建立tracking
# 之后就可以在此分支直接 git push 推送到那个跟踪的远程分支
git push origin my-dev -u
# 合并某分支到当前分支
git merge <name>
# 删除分支
git branch -d <name>
# 分支重命名
git branch -m oldName newName
# =号后面的就是指将远程的dev分支和本地的dev分支形成关联
git branch --set-upstream-to=dev origin/dev
git pull
git reset --hard HEAD^ # 将本地版本重置到上一次commit
git reset --hard 1094a12 # 将本地版本重置到指定版本,可以往前也可以往后
git reflog # 查看命令历史找到commit id
git reset --hard commit_id
git revert # 逆转上一次的提交
git revert commit_id # 逆转指定的提交
# commit链 A-B-C-D-E
git revert B..E # 前开后闭 逆转了C-D-E的操作
git revert B^..E # 逆转了B-C-D-E的操作
# 如果你只想修改上一个 commit 的 message#
# 就会出现上一次的commit信息,进入vim编辑模式修改 commit message 即可 然后 :wq
git commit --amend
# 如果上一次的修改,你遗漏了某些更改。
# 直接修改遗漏的修改 然后
# 如果已经前面的修改已经push到远程了,之后应该使用push -f
git add a.txt
git commit --amend
# 在当前分支上 应用某次修改
git cherry-pick <commit_id>
# 应用多次修改 包含B 不包含A, A为时间线较早的commit
git cherry-pick A..B
# 应用多次修改 包含A和B
git cherry-pick A^..B
# 变基为当前dev分支上的HEAD指向,当前改动应用在此HEAD之后;
git pull origin dev --rebase
# 变基到某一次提交
git rebase -i <commitId>
# 变基到最近3次提交之前,对这3个commit进行操作
git rebase -i HEAD~3
pick asd2112 修改一
pick kjk21an 修改二
pick Auk3pan 修改三
# 使用vim模式进行修改 选择pick还是其他操作 然后wq
pick: 保留此次提交
reword: 保留此次提交,但是修改commit message
edit: 保留此次提交 但是需要修改
squash: 压缩此次提交,即合并到上一个的提交里面
fixup: 将该commit和前一个commit合并,但我不要保留该提交的注释信息
exec: 执行shell命令
drop: 丢弃该commit
# 对相关提交操作完之后
git add .
git rebase --continue
# 此时,本地就是整理之后的commit记录
# 如果之前的commit已经提交到远程了,此时需要强推
git push origin dev -f
# 如果你想保存当前的修改,但当前修改又不是一个合适的 commit,可以选择先stash
# 缓存当前修改
git stash
# 查看储藏的信息列表
git stash list
stash@{0}: WIP on dev: f52c633 add merge
# 存储当前改动 并附加描述信息
git stash save "message"
# 存储当前改动 并包含未跟踪的新增的文件
git stash -u
# 应用最新储藏的,但是会删除这一次stash的信息
git stash pop
# 应用指定储藏(默认应用第一次储藏stash@{0}),不会删除stash的信息
git stash apply stash@{x}
# 删除指定储藏
git stash drop stash@{x}
# 删除所有储藏
git stash clear
# clone
git clone git@github.com:xxx/xx.git
# 关联
git remote add origin git@github.com:xxx/xx.git
# 添加多个仓库,也需要多次分别push
git remote add gitee https://github.com/demo.git
# 为origin增加一个对应的仓库地址,一次push会推送到多个仓库
git remote set-url --add origin https://github.com/demo.git
# 直接修改当前origin指定的远程仓库地址
git remote set-url origin https://github.com/demo.git
# 取消关联
git remote remove origin
# git fetch 对本地的分支、版本没有影响
# 抓取远程更新,远程跟踪分支已更新,需要将这些更新取回本地
git fetch origin
git fetch github
git fetch --all
# 抓取远程更新之前 删掉在所有远程都已经不存在的跟踪(tracking)分支
git fetch -p
# 查看远程分支情况 包括分支是否tracking
git remote show origin
# 在本地删除远程已经删除的但是本地依然tracking其的本地分支 与 git fetch 参数 -p 效果一样
git remote prune origin
git tag v1.0 # 默认标签是打在最新提交的commit上的。
git tag v0.9 commit_id # 将标签打在指定commit_id上
# 创建有说明的标签 -a 指定标签名 -m 指定标签的说明文字 后面在接commit_id
git tag -a v1.0 -m "version 1.0 released" 1094adb
git tag # 查看所有便签
git show v0.9 # 查看某个标签的具体信息
git tag -d v1.0 # 删除标签v1.0
git push origin v1.0 # 向远程推送某个标签
git push origin --tags # 推送所有未推送的标签到远程
git tag -d v1.0 # 先删除本地的
git push origin :refs/tags/v1.0 # 删除远程的
配置别名,可以用来简化操作,–global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
# 编辑当前仓库的的配置
git config -e
# 将git status 配置为 git st
git config --global alias.st status
# git checkout 配置为 git co
git config --global alias.co checkout
# git commit 配置为 git ci
git config --global alias.ci commit
# git cherry-pick 配置为 git cp
git config --global alias.cp cherry-pick
# git branch 配置为 git br
git config --global alias.br branch
# git reset HEAD 配置为 git unstage 将当前暂存区的修改撤销掉
# git unstage test.py === git reset HEAD test.py
git config --global alias.unstage 'reset HEAD'
# 配置一个git last,让其显示最后一次提交信息
git config --global alias.last 'log -1'
# 将git lg 配置多个参数,便于查看log
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"