命令汇总

在使用的任何的 git 命令前,都要切换到 git 项目目录下

常用命令

  • git init 初始化一个 git 仓库

  • git status 查看当前 git 仓库的状态

  • git log 查看提交记录

添加和提交

git add [files] #把当前文件放入暂存区域

git add * # 把所有修改文件放入暂存区域

git add -u [path] # 添加[指定路径下]已跟踪文件


git commit # 给暂存区域生成快照并提交到本地版本库    

git commit [file1] [file2] ... 
# 提交指定文件,对于跟踪过的文件,也可以不用git add,直接git commit file提交到本地版本库

git commit -m 'message' #添加注释

git commit -a 
# 跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交,注意是已经跟踪过的,对Untracked files无效

git commit --amend # 修改最后一次提交,git会使用与当前提交相同的父节点进行一次新提交,旧的提交会被取消。

git commit -v # 提交时显示所有diff信息

相关补充: 提交信息规范

恢复相关的操作

  • 文件删除相关

rm *&git rm * 
# 第一个命令移除工作区文件,第二个命令本地已经删除了的文件,通过此命令把暂存区的文件也删除了。

git rm -f * 
# 工作区和暂存区都有文件,运行此命令,会把两个文件都删除

git rm --cached * # 停止追踪指定文件,但该文件会保留在工作区

git mv file_from file_to # 重命名跟踪文件
  • 查看历史记录

git log # 查看最近的提交日志
# 每次提交都有一个唯一id,可以查看所有提交和他们的id,之后恢复会用到

git log --pretty=oneline #单行显示提交日志 --pretty: 指定默认不同格式展示信息

git log --graph # 显示 ASCII 图形表示的分支合并历史。

git log --graph --oneline   #oneline只是让输出看起来比较舒服,只显示最开始7个字符长度的 SHA-1 校验和。

git log --author=cfangxu #只看某个人的提交记录

git log --abbrev-commit # 显示log id的缩写

git log -num #显示几条log(倒数)

git log --stat # 简略的显示每次提交的内容更改, 如哪些文件变更,多少删除,多少添加等

git log --follow [file] # 显示某个文件的版本历史,包括文件改名

git log -p [file] # 显示指定文件相关的每一次diff

git log -p -x # 仅显示最近x次的提交,包含每一次的diff
  • 搜索调试

git reflog     # 查看已经修改的版本号,即使是已经删除的某个分支

git blame file.name # 快速显示文件的每一行最后一次修改是谁

git log -S<searchword> --oneline # 在Git的整个历史中进行搜索
  • 对比相关

git show commitId # 查看某一次提交更新了什么

git diff file #查看指定文件的差异(工作区和暂存区)

git diff --stat #查看简单的diff结果(工作区和暂存区)

git diff #比较工作区和暂存区之间的差异

git diff --cached(--staged) #比较暂存区和版本库之间的差异

git diff HEAD #比较工作区和版本库之间的差异

git diff branch #比较工作区和分支之间的差异

git diff branch1 branch2 #比较两次分支之间的差异

git diff commit commit #比较两次提交之间的差异
  • 撤销相关

git reset HEAD <file.name> # 取消已经暂存的文件

git reset -- <file.name> # 同上,可以用git reset 撤销所有暂存区域文件。

git reset --hard HEAD <file.name> # 恢复到当前版本库的状态,会覆盖工作区和缓存区的文件

git reset --hard commit(id) # 通过提交id来恢复之前的某个版本

git reset --hard  HEAD^ # 跳到之前的一个版本,可以连续使用    

git reset --hard  HEAD~<num> # 跳过num个版本,到想要的版本。

checkout命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。当给定某个文件名(或者打开-p选项,或者文件名和-p选项同时打开)时,git会从指定的提交中拷贝文件到暂存区域和工作目录。如果命令中没有指定提交节点,则会从暂存区域中拷贝内容。注意当前分支不会发生变化。

git checkout -- file # 取消在工作区对文件的修改(从暂存区——覆盖工作区)

git checkout -- . # 从暂存区取出文件覆盖工作区

git checkout branch|tag|commit -- file_name # 从仓库取出file覆盖当前分支

分支

  • 创建分支

git branch # 列出本地分支

git branch -r # 列出远端分支

git branch -a # 列出所有分支

git branch -v # 查看各个分支最后一个提交对象的信息

git branch --merged # 查看已经合并到当前分支的分支

git branch --no-merged # 查看未合并到当前分支的分支

git branch test # 新建test分支

git branch branch [branch|commit|tag] # 从指定位置出新建分支

git branch --track branch remote-branch # 新建一个分支,与指定的远程分支建立追踪关系

git branch -m old new # 重命名分支

git branch -d test # 删除test分支

git branch -D test # 强制删除test分支

git branch --set-upstream-to origin/dev dev # 在dev执行,将本地dev分支与远程dev分支之间建立链接


git checkout test # 切换到test分支

git checkout -b test # 新建+切换到test分支

git checkout -b test dev # 基于dev新建test分支,并切换
  • 合并分支

git merge test # 将test分支合并到当前分支,

git merge –-no-ff test # 强制指定为非快速合并(no-fast-forward)

git merge --squash test ## 合并压缩,将test上的commit压缩为一条,svn的在合并分支时采用的就是这种方式,squash会在当前分支新建一个提交节点
squash和no-ff非常类似,区别只有一点不会保留对合入分支的引用


git cherry-pick commitId # "复制"一个提交节点并在当前分支做一次完全一样的新提交。

git cherry-pick -n commit # 拣选多个提交,合并完后可以继续拣选下一个提交


git rebase master # 将master分支上超前的提交,变基到当前分支,本质上,这是线性化的自动的 cherry-pick

git rebase --onto master 169a6 # 限制回滚范围,rebase当前分支从169a6以后的提交

git rebase --interactive # 交互模式    

git rebase --continue # 处理完冲突继续合并    

git rebase --skip # 跳过    

git rebase --abort # 取消合并
  • 合并推荐链接:

图解4种git合并分支方法

远程仓库

  • 连接远程仓库

git remote add origin1 git@github.com:yanhaijing/data.js.git # 添加远程仓库

git remote # 显示全部源
git remote -v # 显示全部源+详细信息

git remote rename origin1 origin2 # 重命名

git remote rm origin # 删除

git remote show origin # 查看指定源的全部信息

# 远程分支删除后,清除还存在的本地分支
git remote prune origin --dry-run # prune 是修剪的意思,–dry-run 表示模拟列出将要修剪的 local stale branch ,但不真的执行。
git remote prune origin # 移除掉远程分支已经被刪除的 local branch
  • 操作远程仓库

git fetch origin remotebranch[:localbranch] # 从远端拉取分支[到本地指定分支]

git merge origin/branch # 合并远端上指定分支

git pull origin remotebranch:localbranch # 拉取远端分支到本地分支

git pull origin master --allow-unrelated-histories # 允许拉取远端无关历史的master分支到本地当前分支

git push origin branch # 将当前分支,推送到远端上指定分支

git push origin localbranch:remotebranch # 推送本地指定分支,到远端上指定分支

git push origin :remotebranch # 删除远端指定分支

git push origin remotebranch --delete # 删除远程分支

git branch -dr branch # 删除本地和远程分支

git checkout -b [--track] test origin/dev#基于远端dev分支,新建本地test分支[同时设置跟踪]

工作现场

git stash # 将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。

git stash list # 查看保存的工作现场

git stash apply # 恢复工作现场

git stash drop # 删除stash内容

git stash pop # 恢复的同时直接删除stash内容

git stash apply stash@{0} # 恢复指定的工作现场,当你保存了不只一份工作现场时。

标签

标签作用: 在开发的一些关键时期,使用标签来记录这些关键时刻, 例如发布版本, 有重大修改, 升级的时候, 会使用标签记录这些时刻, 来永久标记项目中的关键历史时刻;

git tag # 列出现有标签    

git tag v0.1 [branch|commit] # [从指定位置]新建标签
git tag -a v0.1 -m 'my version 1.4'#新建带注释标签

git checkout tagname # 切换到标签

git push origin v1.5 # 推送分支到源上

git push origin --tags # 一次性推送所有分支

git tag -d v0.1 # 删除标签

git push origin :refs/tags/v0.1 # 删除远程标签

链接:里面有关于标签的操作

推荐资源

Last updated