Git常用指令汇总

Posted 夏小悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git常用指令汇总相关的知识,希望对你有一定的参考价值。

文章目录

前言

  本篇文章主要汇总了项目开发过程中常用的git命令,以便后续查询。

1. 获取git仓库

  git clone <url> 从服务器端克隆一个已存在的git仓库到本地

# 克隆 Musicer 库到本地
git clone https://github.com/xiayouran/Musicer.git

# 不仅会 git clone 当前项目中的代码,也会 clone 项目中子项目的代码
# 即 git 中的 git
git clone --recursive xxxxxx

  git init 将尚未进行版本控制的当前本地目录转换为git仓库

git init
# 在当前目录生成.git子目录,所有有关此项目的快照数据都存放在这里,默认是隐藏的

# 添加仓库
git remote add origin git@xxxxxx.git

2. 记录每次更新到仓库

  git status 查看哪些文件处于什么状态

git status

# 更精简的输出
git status -s
# git status --short

??	# 表示新添加的未跟踪文件
A	# 表示新添加到暂存区中的文件
M	# 表示修改过的文件

  git add 添加新创建或修改的文件到本地的暂存区

# 添加所有文件
git add .

# 等同上述命令
git add --all

  .gitignore 忽略文件

# 通过配置目录下的 .gitignore 文件来忽略某些文件
for example:

# 忽略任何目录下名为 .idea 的文件夹
.idea/

# 忽略所有的 .pyc 文件
*.pyc

  git diff 显示哪些文件发生了改变

# 查看尚未暂存的文件更新了哪些部分
git diff

# 比对已暂存文件与最后一次提交的文件差异
git diff --staged

# 查看已经暂存起来的变化
git diff --cached

  git commit 提交代码到本地库

# 添加提交描述
git commit -m 'xxx'

# 完成 add 和 commit 两个操作
git commit -a -m 'xxx'

  git rm 删除文件

# 删除 xxx.txt 文件(包括磁盘上的)
git rm -f xxx.txt

# 删除 xxx.txt 文件(不包括磁盘上的),只是从暂存区删除
git rm --cached xxx.txt

# 清除本地缓存
git rm -r --cached .

  git mv 移动文件

# 文件重命名
git mv xxx.txt yyy.txt

3. 查看提交历史

  git log 查看提交历史

# 按时间先后顺序列出所有的提交,最近的更新排在最上面
git log

# 显示每次提交所引入的差异(按 patch 的格式输出)
git log -p
# git log --patch

# 限制日志条目数量
git log -p -3
# 只显示最近的三次提交

# 查看每次提交的简略统计信息
git log --stat

# 使用不同于默认格式的方式展示提交历史
# oneline 将每个提交放在一行显示,在浏览大量的提交时非常有用
git log --pretty=oneline

# --graph 在日志旁以 ASCII 图形显示分支与合并历史
git log --pretty=oneline --graph

# format 可以定制记录的显示格式,对后期提取分析格外有用
git log --pretty=format:"%h - %an, %ar : %s"
选项说明
%H提交的完整哈希值
%h提交的简写哈希值
%T树的完整哈希值
%t树的简写哈希值
%P父提交的完整哈希值
%p父提交的简写哈希值
%an作者名字
%ae作者的电子邮件地址
%ad作者修订日期
%ar作者修订日期,按多久以前的方式显示
%cn提交者的名字
%ce提交者的电子邮件地址
%cd提交日期
%cr提交日期(距今多长时间)
%s提交说明

4. 撤消操作

# 覆盖上次的提交信息
git commit --amend

  git reset 取消暂存

# 取消 xxx.txt 文件的暂存
git reset HEAD xxx.txt

5. 远程仓库的使用

  git remote 查看已经配置的远程仓库服务器

git remote

# 显示需要读写远程仓库使用的 git 保存的简写与其对应的 URL
git remote -v

# 添加一个新的远程 git 仓库
git remote add <shortname> <url> 

# 查看某个远程仓库
git remote show <remote>

# 查看 origin 远程仓库
git remote show origin

  git fetch 从远程仓库中获得数据

# 从远程仓库中拉取所有本地还没有的数据
# 默认 clone 的仓库<remote>为origin
git fetch <remote>
# 只会将数据下载到本地仓库,并不会自动合并或修改当前的工作,需要手动合并

  git push 推送到远程仓库

git push <remote> <branch>

# 将 master 分支推送到 origin 服务器
git push origin master

6. 打标签

  git tag 给仓库历史中的某一个提交打上标签

# 列出已有的标签
git tag
# git tag -l
# git tag --list

# 创建附注标签(用于版本号)
git tag -a v1.0 -m "my version 1.0"

# 创建轻量标签
git tag v1.0

# 对提交历史打标签
git tag -a v1.0 <hash value>

# 删除标签(local)
git tag -d v1.0

# 删除远程标签
git push origin --delete v1.0

# 推送远程标签
git push origin master --tags

  git show 查看标签信息和与之对应的提交信息

# 查看 tag 为1.0的信息
git show v1.0

7. 使用分支

  git branch 创建分支

# 创建分支
git branch xxx

# 删除分支
git branch -d xxx

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

# 覆盖远程分支
git push -u origin xxx -f

# 查看当前所有分支
git branch

# 查看每一个分支的最后一次提交
git branch -v

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

# 查看所有包含未合并工作的分支
git branch --no-merged

  git checkout 切换分支

# 切换分支到xxx
git checkout xxx

# 创建分支yyy,并切换到分支yyy
git checkout -b yyy

  git merge 合并分支

# 将分支xxx合并到当前HEAD所指的分支
git merge xxx

  git pull 获取最新的远程仓库分支

# 获取最新的远程仓库分支
git pull origin xxx

8. Q&A

  Q1:出现warning: suboptimal pack - out of memory异常信息:


  A1:需要在.git目录下的config文件添加:

[pack]
    windowMemory = 64m

  Q2:如何删除大文件或工程缓存的日志文件?
  A2:执行如下命令:

# 找出大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk 'print$1')"

# 删除
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch YOUR-FILE-NAME' --tag-name-filter cat -- --all

rev-list:	# 用来列出Git仓库中所有提交中涉及的文件名及其ID
--objects:	# 列出该提交涉及的所有文件ID
--all:		# 所有分支的提交,相当于指定了位于/refs下的所有引用
verify-pack:	# 命令用于显示已打包的内容,用它来找到那些大文件
-v:			# 打印详细信息

filter-branch:	# 用来重写Git仓库中的提交
--index-filter:	# 用来指定一条Bash命令,然后Git会检出所有的提交,执行该命令,然后重新提交
–all:			# 表示需要重写所有分支(或引用)
YOUR-FILE-NAME:	# 查找出来的大文件名字或文件夹
# 清处并回收空间
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
# git gc --aggressive --prune=now

# 推送到服务器,清理远程仓库
git push origin --force --all
git remote prune origin

# 查看仓库大小
git count-objects -vH

  Q3:远端仓库太大,拉取不下来怎么解决?
  A3:执行如下命令:

# 克隆最新一次的commit
git clone --depth 1 git@xxxxxx.git

# 下载所有历史
git fetch --unshallow

  温馨提示:一定要写好.gitignore,大文件别上传^_^

以上是关于Git常用指令汇总的主要内容,如果未能解决你的问题,请参考以下文章

git常用指令汇总

Git常用指令汇总

git常用指令学习

开发工具 - Git之Git常用命令汇总

git常用操作命令

Android 常用git指令记录总结