首页 > 代码库 > 拾遗:Git 常用操作回顾

拾遗:Git 常用操作回顾

温故而知新,可以为师矣。

Git 布局

  • 工作区---->暂存区---->本地仓库---->远程仓库

Create Repository

  • git init PATH
  • git add PATH
  • git commit -m CONTENTS

Revoke

  • HEAD 表示当近一次 commit 版本,HEAD^ 或 HEAD~1 表示上一次提交,HEAD^^ HEAD~2(波浪线) 表示上上次提交...依次类推;也可以用 HEAD@{N}  或 哈希值等形式直接定位(根据 reflog 显示的历史 HEAD 记录)
  • git status
  • git diff [--staged/--cached] [COMMIT] [-- PATH]:默认是比较工作区与 HEAD 之间的差异,添加 --staged 或 --cached 则是默认比较暂存区与 HEAD 之间的差异,两种情况均可以指定要比较的 commit hash,可以用 -- filename 的形式指定要比较的具体文件
  • git diff [BRANCH_0] [BRANCH_1] —— 比较个分支最新提交之间的差异
  • git reset [--hard] COMMIT [PATH] —— 根据 git log 或 git reflog 查到的 SHA1 值,在版本之间进行全局文件或指定文件的状态回退,reset 的作用是将仓库中的文件恢复至暂存区(--soft,默认值)或工作区(--hard)
  • git reflog —— 暂时记录最近的每一条 git 操作记录内容及其 HASH,即 HEAD 的变动记录,该记录不会永久保存
  • git checkout [COMMIT] -- PATH —— 撤销工作区中单个文件的修改,恢复到上一个最新状态(可能是暂存区或本地仓库中的状态,以时间戳为准),必须添加 ‘--‘,否则会被理解为切换分支,可以指定从哪个次提交状态恢复
  • git reset 与 git checkout 的区别:reset 只能恢复已经 commit 到版本库中的状态,checkout 可以恢复到暂存区中的状态是,reset 会同时将 git log 中对应的记录删除
  • git rm [PATH] —— 同时删暂存区及工作区中的文件,添加 --cached 选项仅删除暂存区中的文件
  • git mv [PATH] [PATH] —— 重命名,同时作用于暂存区及工作区
  • git  revert COMMIT —— 从远程仓库撤销已 push 的提交
  • git commit --amend -m "CONTENTS" —— 修改最近一次提交的备注内容
  • git rebase BRANCH —— 重新选定本分支的起点,同时不丢失历史提交记录

Remote Repository

  • git remote add TAG git@github.com:USERNAME/PROJECTNAME.git —— 其中 TAG 指为远程仓库打的标签,以此标识每个仓库
  • git push [-u] [REPOSITORY_TAG] [BRANCH] —— 将本地仓库文件推送至远程,初次推送时添加 -u 选项将本地仓库分支与远程仓库分支关联
  • git fetch —— 下载远程仓库代码但不合并,人工检查无误后 git merge
  • git pull —— 下载同时合并
  • git pull --rebase —— 拉取远程代码的同时,更新本地仓库起点

Branch Management

  • git branch BRANCH_NAME [BASE_BRANCH] —— 基于 BASE_BRANCH 创建新分支,默认基于当前所在分支
  • git checkout BRANCH_NAME —— 切换分支
  • git checkout -b BRANCH_NAME —— 创建一个分支同时切换过去
  • git merge [--no-ff] BRANCH_NAME —— 合并目录分支到当前分支,git 默认是 fast forward 合并模式,此模式下合并后,被合并的分支上原先的操作计录都将消失,添加 --no-ff 选项表示不使用 fast forward 模式,分支的相关记录得以保留
  • git branch -d BRANCH_NAME —— 删除已经被合并过的分支
  • git branch -D BRANCH_NAME —— 删除没有被合并过的分支
  • git stash —— 将当前工作区中已被 git add 但未提交的文件隔离保存(不是放到暂存区),并处于不可见状态,即 git status 不会提示更改未提交
  • git stash list —— 显示被隔离保存起来的状态列表
  • git stash apply [STASH] —— 恢复隔离区的指定 stash
  • git stash pop [STASH] —— 同 apply,但会同时从 stash 列表删除该条目
  • git stash drop [STASH] —— 手动删除某个 stash 条目,默认都是针对最新的 stash
  • git stash clear —— 清除所有stash 条目
  • git remote [-v] —— 显示远程仓库信息,-v 显示详细信息,如仓库地址等
  • git branch BRANCH_NAME UPSTEAM —— 建立分支的同时关联到远程分支
  • git branch -r —— 显示远程分支
  • git branch -a —— 同时显示远程与本地分支
  • git branch --set-upstream-to=origin/develop develop —— 建立与连程分支的关联,若不指定分支名称,则关联当前所在分支到远程(如:origin/master 等)

Tags(助记符,方便人类记忆,毕竟 hash 值不好分辩)

  • git tag TAGNAME [-a -m CONTENTS] [COMMIT_HASH] —— 默认是给最近一次提交打标签,可以指定目标 commit 的 hash 值,还可以添加标签说明(-a -m "...")
  • git tag —— 显示所有标签列表
  • git show TAGNAME —— 可显示与指定标签关联的 commit 相关信息
  • git tag -d TAGNAME —— 删除本地标签
  • git push REMOTE_REPOSITORY TAGNAME —— 将标签关信息推送至远程仓库
  • git push REMOTE_REPOSITORY --tags —— 推送所有标签信息推送至远程仓库
  • git push REMOTE_REPOSITORY :refs/tags/TAGNAME —— 用于删除远程标签,先要 git tag -d 删除本地标签,然后执行此操作删除远程标签

Alias(设置 git 命令别名)

  • 示例: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"

删除与重命名远程分支:

  • git push --delete origin dev  //删除无程分支
  • git push --delete origin tag <TagName>  //删除远程标签
  • git remote prune origin //清除本地显示的,但远程仓库中已不存在的僵死分支
  • git fetch -p  //效果同上
  • git branch -m dev develop  //将本地分支 dev 分支重命名为 develop

拾遗:Git 常用操作回顾