git的使用手册,常用命令

git的使用手册

前言

git命令图解
注:

  • 根据个人理解画的图用于辅助理解,如有错误请指正。
  • 如果可以看懂上面的图,而且命令都能够理解并使用。这篇文章的帮助应该不大。
  • 这里只是展示了不同区域之间代码传递的时候使用的命令,使用的时候要注意具体参数。
  • 所谓的不同区域大多是一个个的指针而已。
  • 修改代码什么的均发生在工作区。

正式开始


git初始化

# 通过全局设置,设置git的用户名和邮箱,,,如果没有登录的话
git config --global user.name "username"
git config --global user.email "email"
git init

添加文件

相当于将工作区文件修改提交到暂存区

git add <filename>
git add .   // 添加当前目录下所有被改变的的文件

提交修改到版本库

将暂存区的文件修改提交到本地版本库

git commit -m "message"

注意 -m 后面的message 必须用双引号,

追加提交

git commit -m " this is test amend commit"
git add < filename>
git commit --amend  // 此命令会打开编辑窗口,用于编辑前一次的commit message。

上面的三个命令只会产生一个提交记录

通过邮件发送修改

导出修改

使用 git format-patch 命令。这个命令会将提交导出为电子邮件格式的文件。

将最近三次的提交,导出为文件:

git format-patch -3  

也可以指定某一次的提交,或者某一个范围内的提交,可以使用 -o 来指定输出的文件夹

应用补丁修改

进入你想要导入提交记录的 Git 仓库的目录,然后运行 git am 命令,并指定补丁文件或包含补丁文件的目录:

git am --signoff < patch-file.patch

或者,如果补丁文件在一个目录中:

git am --signoff --directory=path/to/patches/

–signoff 选项会在每个补丁应用后添加一个 Signed-off-by 行,这通常用于表明开发者的同意

同时应用多个补丁

# windows 不支持 * 通配符,需要使用 Git Bash
git am ./temp/*.patch

查看文件之间的区别内容

// 工作区
git diff <filename>  工作区暂存区的区别
git diff <commid> <filename> 指定版本和工作区的区别。
// 暂存区
git diff --cached <filename>  工作区和版本库最新版本的区别
git diff --cached <commid> <filename> 指定版本和暂存区的区别。
// 版本之间
git diff <commid> <commitd>  查看两个版本之间的区别

查看哪些文件有修改

git status

这个命令可以用来查看哪些文件在工作区有修改,哪些修改已经提交到了暂存区。git diff 则是查看文件具体的修改

查看日志

显示日志

git log  // 全量展示
git log --pretty=oneline  // 将每条记录选取关键信息合成一行展示。
git log --abbrev-commit   // 将commit id 显示为缩写。
git log --graph       // ASCII图展示每次的提交所在分支以及分支分化衍合情况
git log -5        // 展示最近的五条数据提交记录

过滤日志

git log --author <authorName>  // 按作者名过滤
git log --grep <commit message> // 按提交信息
git log -- <fileName>  // 按文件名

以上的这参数可以组合使用

推荐使用如下配置

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 lg 就可以显示格式化好之后的日志了。

引用日志

  git reflog 查看所有版本操作相关的,例如版本回退等等的记录,也就是HEAD指针指向的位置的历史记录,即ref的log,即对版本库中的代码的增删改查记录。

reflog 是存储于本地的日志并不会共享。

版本回退

在git 中HEAD表示当前的版本,HEAD^ 表示上一个版本,HEAD^^ 表示上上个版本。较多的试试直接用数字指定。例如:HEAD~10。

注意:^ 字符是windows的cmd.exe 中的元字符。windows下使用HEAD^可能会报错
fatal: ambiguous argument 'HEAD
': unknown revision or path not in the working tree.
这时要使用HEAD"^ “或者"HEAD^”,来避免它。

例如

git reset --hard HEAD^ 强制回退上一版本
git reset --hard HEAD~1
git reset --hard < commit id> 默认为HEAD

以下操作慎用,命令使用之后不一定能够有反悔的机会。因为只有在对版本库中的文件进行增删改查的时候,在git log或者git reflog中才会有日志记录。尤其在使用–hard 的时候更有可能会直接无提示的清空掉工作区和暂存区的数据


  • 从工作区撤销修改
    将该文件在工作区的修改全部撤销,相当于将工作区的文件修改为和暂存区的一致。

    git checkout -- < filename>
    

filename 是必填的

  • 从暂存区撤销修改
    如果文件已经提交到了暂存区,首先需要撤销暂存区的修改,

    git reset HEAD < filename>
    

    将暂存区的修改回退到工作区,然后根据需要决定是否撤销工作区的修改,如果需要继续撤销,参考上一条。

  • 从本地版本库撤销修改

    git reset <options> <commit id>
    // 回退 options 默认为mixed commit id默认为HEAD
    
    git reset --mixed 保留工作区,把暂存区的改变回退到工作区,移动HEAD指针,暂存区和HEAD指针的版本一致。
    git reset --soft  保留工作区和暂存区,仅移动HEAD指针,所有的reset都会执行这个操作。
    git reset --hard  清空工作区和暂存区的改变。移动HEAD指针,暂存区与工作区和HEAD指针的版本一致。
    git reset --merge 如果暂存区为空,此命令无效果。如果工作区和暂存区存在对同一文件的修改则会失败。一个文件工作区无修改,暂存区存在修改的时候生效,即工作区和暂存区相同但是还没有提交到版本库。此命令会清空工作区和暂存区。移动HEAD指针。这类文件的暂存区和工作区同步为HEAD指针的版本一致。  
    git reset --keep 保留工作区,把暂存区的改变也回退到工作区,移动HEAD指针,暂存区和HEAD指针的版本一致。
    
    

    –mixed 和 --keep的区别在于,恢复到历史版本的时候,如果工作区或者暂存区存在修改的文件在要恢复历史版本和HEAD指向的版本之间存在不同,mixed会直接恢复,–keep会失败。

  • 撤销远程库修改

    先撤销本地的修改,然后推送到远程库即可。

    git push -f // 强制推送到远程库  慎用---可能会被打
    
  • 只恢复指定版本的内容其他版本不变。可以使用revert(反做)命令。

    git revert <commit ID
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值