项目中常用的git指令

178 阅读6分钟

Git 工作区、暂存区和版本库

在整个的git中,一共提供了三个区域

  • 工作区:用户操作的文件夹,所有的文件操作都以工作为主。
  • Git仓库:
    • 暂存库:将工作区中为保存的文件保存到暂存区中,此部分由Git维护
    • 版本库:将项目发布代码的区域。

    用户在工作区中编写的代码,都不会影响到git的版本库,如果说要想将工作区中的代码发布到版本库中,就需要先将工作区的代码提交到暂存库中,使用git add .  命令,然后再使用git commit -a -m "注释"  提交到版本库中。

image.png     保存在暂存区中的智能说是暂时需要的,从工作区中增加到暂存区中的文件,也可以在暂存区中删除,然而要想真正发布项目,就必须提交到版本库中。每一次提交都会生成一个commit id,用于退回版本,而在版本库中的head会指向最后提交的代码。

    git的强大在于可以很方便的进行代码版本的回退,和前进。核心的概念在于每一次提交都会有一个commit id

git log  查看提交日志
git log --pretty=oneline    格式化查看日志

b4cb9b38c25ebc97cb998f85ef8ea519d83c6014 (HEAD -> master)
当这个HEAD -> master指针指向的版本,就表示当前使用的版本。而当有最新的提交上来,指针就会指向当前最新的提交点。当我们改变这个指针的指向,就可以进行代码的版本回退和前进操作。

GIT撤销修改 - 未提交

在开发过程中,经常会发生无用的修改操作,在git中可以撤销修改操作,撤销修改需要考虑到两种情况:

  1. 在工作区中发生了改变,但是此时还没有提交到暂存区(add之前)
  2. 已经提交到了暂存区,但是没有发布到版本库中

在工作区中发生改变,进行撤销。此时已经修改了一个文件,已经有状态显示

image.png

使用命令:git checkout 重新检出代码(查看发生改变的文件)

bUMFzcSJs1.jpg

要想恢复代码,使用git checkout 文件名称  来恢复即可。此时恢复之后再通过git status查看状态时,已经没有了修改状态

image.png

工作区已经修改完成,提交到了暂存区中。撤销

此时修改了两个文件,并且已经使用git add . 增加到了暂存区中

image.png

然后使用 git checkout 文件名称 撤销修改

GIT撤销修改 - 已提交

git reset HEAD <file_name>命令撤销提交到暂存区的内容,再使用git checkout -- <file_name>命令,来清空工作区的修改

git reset --hard HEAD^

HEAD是指向当前版本的指针,HEAD^表示上个版本,HEAD^^表示上上个版本
如果你进行了2次commit,想都撤回,可以使用HEAD~2或者HEAD^^

关于git reset --

  • --mixed 默认参数,意思是:不删除工作空间改动代码,撤销commit,并且撤销git addgit reset --mixed HEAD^git reset HEAD^ 效果是一样的。
  • --soft 不删除工作空间改动代码,撤销commit,不撤销git add .
  • --hard 删除工作空间改动代码,撤销commit,撤销git add .

GIT撤销修改 - 已push回退

  1. 使用git log命令,查看分支提交历史,确认需要回退版本的<commit_id>
  2. 使用git reset --hard <commit_id>命令或者git revert <commit_id>,进行版本回退(此时本地已回退)
  3. git commit后,再次使用git push origin <分支名> --force命令(该指令务必确认代码无误再使用),推送至远程分支(此时线上版本已回退)

命令:git reset --hard HEAD^
revert和reset的区别:

  1. 在实际生产环境中,代码是基于master分支发布到线上的,会有多人进行提交。可能会碰到自己或团队其他成员开发的某个功能在上线之后有Bug,需要及时做代码回滚的操作。 在确认要回滚的版本之后,如果别人没有最新提交,那么就可以直接用reset命令进行版本回退,否则,就可以考虑使用revert命令进行还原修改,不能影响到别人的提交。
  2. reset命令会把要回退版本之后提交的修改都删除。要从第三次修改回退到第一次修改,那么会删除第二、三次的修改。【注:这里并不是真正的物理删除】
  3. 如果发现第二次修改有错误,想要恢复第二次修改,却要保留第三次修改,使用revert命令,其产生了新的commit_id

Git配置

查看global配置

 git config --global -l

设置用户名&邮箱名

git config --global user.name "name"
git config --global user.email "email"

生成密钥

在使用代码仓库平台的时候,往往需要设置ssh 密钥,以方便的完成代码的检出/提交,通过ssh-keygen命令生成所需的秘钥
主要参数介绍

  • -t 加/解密算法
  • -b 秘钥长度,rsa默认秘钥长度的为 2048
  • -C 注释,一般是填写用户名
  • -f 指定生成的秘钥文件名,如果不提供此参数则使用默认文件名,如rsa私钥默认文件名 ~/.ssh/id_rsa ,公钥默认文件名 ~/.ssh/id_rsa.pub

下面是一个示例

ssh-keygen -t rsa -b 2048  -C "ym2048@126.com"  -f "github" 
ssh-keygen -t rsa // 简单语句

查看公钥

cat ~/.ssh/id_rsa.pub

git使用中遇到的问题

文件名称大小写不敏感

项目中可能遇到文件名称大小写不规范问题,需要重新命名,比如:demo.js修改为Demo.js,然后进行提交,然后就会发现只有本地的大小写名称变了,仓库的文件名称并没有改变。 解决方法:先将需要修改的文件名称修改为其他名称,进行一次add,然后再修改为正确的文件名称再进行add commit push
例:先将demo.js修改为demo1.js,进行一次add,然后将demo1.js修改为Demo.js之后进行一系列提交操作。

空目录不会自动删除

问题描述:将一个项目中不需要的文件夹(以及下面所有文件)删除并提交之后,重新拉取代码会发现文件目录结构依然存在(文件夹是空的)

内容为引用网络资源整理地址如下

查看引用原文
查看引用原文
查看引用原文

可能存在不准确的地方,欢迎各位大佬指正,和谐讨论共同进步!