git指南

153 阅读4分钟

Git安装与用户配置

全局配置

git config --global user.name "your_name"
git config --global user.email "example@example.com"

查看配置信息

git config -ll

创建版本库

本地第一次创建,创建完毕或者任一过程都可以使用git status查看状态信息

git init
git add .
git commit -m "message"
git push

从代码托管服务端直接clone下来的,则不需要初始化

git add .
git commit -m "message"
git push

版本管理

  • 版本号说明 git的版本commit id是一个SHA1(Secure Hash Algorithm)计算出来的一个非常大的数字,用十六进制表示。

空文的散列(40位)为:

SHA-1("")
= 3eed253db7897807e68e8f64b9bd4d6980b6a0b0

每提交一个版本,Git会根据这些版本将其自动串成一条时间线,可以在ide自带的Git工具或者其他Gitt自动化工具中,查看Git提交历史

  • 版本查看
git log                   # 提交历史,穿梭历史
git log --pretty=oneline  # 修改参数,指定输出
git reflog                # 命令历史,回到未来
  • 查看示例
$ git reflog
f9e755b (HEAD -> main, origin/main, origin/HEAD, test) HEAD@{0}: merge test: Fas
t-forward
03bc6e0 HEAD@{1}: checkout: moving from test to main

Git当前版本为HEAD@{0}或者HEAD -> main, 用HEAD表示当前版本,上一个版本表示为HEAD^,上上版本为HEAD^^,当然不能一直这么计数,有点呆。

一般常用的几种版本回退如下:利用HEAD指针或者版本号03bc6e0

  • 删除当前版本信息,回退到上一版本,git reset --hard HEAD^ or git reset --hard 03bc6e0
    • 如果想回到当前版本,可以使用git reflog查看命令历史,找到版本号,回到未来
  • 保留当前版本信息,切换到上一版本,git checkout HEAD^ or git checkout 03bc6e0

工作区和暂存区

  • 工作区(Working Directory):电脑里的本地库
  • 版本库(Repositort):工作区的隐藏目录.git这个虽然在工作区中,但是不属于工作区文件,实际上是Git的版本库。可以进入目录cd .git查看目录信息,但是千万不要修改里面的文件!!!
    • config:Git配置信息,使用cat config可以查看里面的配置信息
    • index:暂存区
    • logs/:提交历史记录

管理修改

提交后,可以通过git diff HEAD -- file来查看工作区和版本库里面最新版本的差异:

撤销修改

  • 撤销工作区的修改,此时工作区才是干净的,直接撤销 git checkout -- file 撤销修改恢复文件,其中--表示撤销,没有--则表示切换分支。
  • 撤销暂存区的修改,此时暂存区是干净的,但是工作区的修改依然存在,回到上步操作,继续撤销 git reset HEAD file

删除文件

git rm用于删除一个文件。

如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

分支管理

  • 创建分支 git branch 分支名
  • 切换分支 git checkout -b 分支名
  • 删除分支 git branch -d 分支名
    • 强制删除没有合并过的分支 git branch -D 分支名
  • 合并分支 git merge origin/分支
    • 无冲突,正常合并后,执行 git push
    • 分支冲突,解决冲突后 git commit -m "message"
      • 解决冲突:远程分支代码强制覆盖本地代码
        git fetch --分支
        git reset --hard origin/master
        git pull
        
        其中,git pull和 git fetch的区别:
        • git fetch:相当于是从远程指定分支代码获取最新到本地分支中,不会自动merge

        • git pull:相当于是从远程获取最新版本并 merge 到本地

远程仓库连接

  • 获取本机的ssh_key与GitHub连接
ssh-keygen -t -rsa -C "example@example.com"

在用户目录下(user)下可以找到.ssh目录,id_rsaid_rsa.pub两个文件,将id_rsa.pub内容复制粘贴至github中,即可完成远程连接。

查看文件提交信息差别

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat