工作中用到git时,很多命令经常需要网上查找,浪费了大量时间。因此,决定写本文来收录常用的git命令,方便工作速查,并会不但更新完善。
配置系列
-
git config工具专门用来配置git相应的工作环境变量,这些环境变量决定了git在各个环节的工作方式和行为。-
git config --list可以查看已有配置信息 - 配置用户名和邮箱:
git config --global user.name "someone" git config --global user.email "someone@company.com" -
git config --system修改配置文件[/etc/gitconfig] -
git config --global修改配置文件[~/.gitconfig] - 配置优先级: [工作目录中的
.git/config] > [~/.gitconfig] > [/etc/gitconfig]
-
- 配置
ssh:git可以通过https和ssh两种协议与远程仓库进行通讯。配置ssh的基本思路是:本地生产ssh密钥对--->在仓库端添加本地生产的public key。- 本地生产
ssh密钥对:ssh-keygen -t rsa -
~/.ssh/id_rsa.pub即为public key
- 本地生产
基本操作
-
git add将工作区的文件添加到暂存区 -
git restore撤销git追踪过的文件的修改-
git restore --worktree/-W some_file撤销文件在工作区的修改 -
git restore --staged/-S some_file撤销文件在暂存区的修改,将状态恢复到add之前 -
git restore -s commit_id some_file将当前工作区切换到某一次commit
-
-
git clean从工作目录中删除所有git没有追踪过的文件-
git clean -n演习,列出那些文件将被删除 -
git clean -df删除当前目前下未被``git```追踪过的文件和文件夹
-
-
git reset [--soft | --mixed | --hard] commit_id回退版本,--mixed为默认选项-
git reset --hard commit_id将仓库、暂存区和工作区均回退到某个版本
-
-
git checkout实现git restore和git switch的功能-
git checkout some_branch/git switch some_branch切换分支 -
git checkout -b new_branch/git switch -c new_branch创建并切换分支
-
-
git commit提交 -
git push推送分支-
git push推送到关联的远程分支 -
git push origin some_local_branch:some_remote_branch推送到远程分支 -
git push origin :some_remote_branch删除远程分支 -
git push origin --delete some_remote_branch删除远程分支
-
-
git fetch从远程仓库更新本地仓库 -
git rebase变基-
git rebase some_branch以some_branch为基础执行变基 -
git add解决rebase冲突 -
git rebase --abort终止变基 -
git rebase --continue继续变基
-
-
git merge分支合并-
git add+git commit解决merge冲突
-
-
git pull等同于git fetch+git merge -
git revert撤销某次操作,并将撤销操作作为新的提交 -
git cherry-pick挑选commit进行合并-
git cherry-pick commit-id挑选commit_id进行合并 -
git add解决cherry-pick冲突 -
git cherry-pick --continue继续合并 -
git cherry-pick --abort放弃合并
-
-
git swich切换分支-
git switch some_branch切换分支 -
git switch -c new_branch创建并切换分支
-
-
git log --oneline单行显示提交记录 -
git status查看git工程当前状态 -
git diff-
git diff commit_id查看commit_id的修改 -
git diff commit_id1 commit_id2查看两次提交之间的差异 -
git diff --cached/--staged查看暂存区和仓库之间的差异 -
git diff branch1 branch2查看两分支之间的差异
-
-
git remote remove origin移除源origin -
git remote add origin https://*.git增加源origin
分支管理
- 通过远程分支创建本地分支:
git checkout -b some_local_branch origin/some_remote_branch - 通过当前分支创建分支:
git checkout -b some_branch - 切换分支:
git checkout some_branch - 合并分支:
git merge some_branch - 变基分支:
git rebase some_branch - 删除分支:
git branch -d some_branch - 查看分支:
git branch - 将本地分支与远程分支关联:
git branch --set-upstream-to=origin/some_remote_branch some_local_branch - 推送分支:
git push origin some_local_branch:some_remote_branch - 强推分支:
git push -f
冲突解决
-
git merge冲突解决:git add+git commit -
git rebase冲突解决:git add+git rebase --continue -
git cherry-pick冲突解决:git add+git cherry-pick --continue
修改commit历史
- 修改当前
commit的内容和message:-
git commit --amend将暂存区的内容合并到上一次提交,并可以修改message
-
- 修改历史commit:
-
git rebase -i commit_id以commit_id为基准执行交互式变基 - 修改历史commit里面文件
-
文件权限
- 查看文件权限:
git ls-files --stage some_file - 修改文件权限:
git update-index --chmod=+x some_file
子模块
- 增加子模块:
git submodule add submodule_url - 获取子模块:
- 方式一:
git clone mainmodule_url --recurse-submodules - 方式二:在主项目中执行
git submodule init+git submodule update - 方式三:在主项目中执行
git submodule update --init --recursive
- 方式一:
- 更新子模块到
commit_id:- 进入子模块并更新:
git fetch & git rebase & git reset --hard commit_id - 推到主模块并提交:
git push
- 进入子模块并更新:
- 查看子模块:
git submodule