Git

149 阅读4分钟

写在前面:

开发过程中经常使用Git,但有时候对一些命令还是会不够熟悉,正巧又看到一篇讲到Git一些不常见操作的文章,在这里做个总结

Git的简介

Git的全称是Git Version Control System,它是一个分布式的版本管理系统.

分布式: 代码不仅保存在集中式服务器上还存在于每个开发者的本地机器上。

具有以下功能:

  1. 分布式存储代码库,包括本地和远程仓库
  2. 进行版本管理,版本回溯以及差异比较
  3. 分支创建,利于协同开发

Git与SVN的对比

1. Git是分布式版本管理系统,可以在本地进行代码修改和提交
2. Git使用对象数据库存储代码,而SVN使用文件系统
3. Git的存储是基于快照的(记录文件当前的装填),而SVN是增量存储
> Git的每次提交,都是一张快照,它不是数据的完整拷贝,可以理解成只是数据的样子,

Git命令

1. 帮助 
    git xxx -help
    
2. 配置个人信息
    git config --xxxx user.name <name>
    git config --xxxx user.email <email>
    git conifg --xxx --list
    // 删除
    git config --xxx unset user.name 
    // xxx 包括local/global/system,访问顺序从前到后。
    
3. 查看状态
    git status
    // 简略信息
    git status -s
    // `git status` 命令会比较当前工作目录中的文件状态与 Git 仓库中最新提交的状态(也就是 `HEAD` 指向的提交)之间的差异。 
    
 4. 查看提交记录
     git log 
     git log --oneline
     git log --oneline --graph: 以图形方式显示提交历史,展示分支、合并等操作。
     // 每次提交都会生成一个哈希值,可以用于标识该次提交的唯一性。哈希值是通过对提交内容进行加密计算得出的,因此即使有微小的更改也会导致哈希值的变化
     
 5. git 本地命令

    // 添加到暂存区
    git add <file>
    git add . 
    git add -u   // 不追踪文件
    // 删除重命名/移动
    git rm <file>
    git mv <file1> <file2>
    //删除rm、移动重命名mv可以本地修改,然后git add .记录变化,如果使用git命令,默认会记录到暂存区
    
    
    // 提交
    // git通过暂存区记录的文件差异,生成快照
    git commit -m "xxx"
    git commit -am "xxx"    //这个命令会将所有已跟踪的文件的修改提交到本地仓库
    git tag -a <tag_name> <commit> -m " " //为一个提交打上标签,并写上注释
    
    // 版本回退
    git checkout <commitID>  //   检查之前的代码
    git checkout <branch-name> // 回到分支的最新状态
    git reset <commitID>     // 版本回退
    git reflog <branch-name> // git reflog默认会显示当前分支的HEAD的所有引用记录。
    // reset 有三个参数 --soft --mixed(默认) --hard
    // -- soft 不重置暂存区和工作区
    // -- mixed 不重置工作区,重置暂存区
    // -- hard 重置暂存区和工作区 
    
    // 文件回退
    git checkout <commit> -- file.txt
    
    // 差异比较
    -   工作区和暂存区之间的差异(已追踪的文件) git diff
    -   暂存区和最新提交之间的差异              git diff --cached
    -   两个提交之间的差异                     git diff <commit1> <commit2>
    
    // 分支操作
    git branch 列出所有本地分支
    git branch -r 列出所有远程分支
    git branch <branch-name>
    git checkout <branch-name>
    git checkout -b <branch-name>  //创建且切换
    git branch -d <branch-name> // 删除分支
    git merge <branch-name> 合并分支
    git branch -m <new-name> <old-name> // 更改分支名称
    
    

6. git 远程操作

 // 克隆
 git clone [params] <url> [dir]  克隆仓库,可以克隆到指定目录中
 params: 
        1. --branch xxx  指定克隆远程仓库的某个分支(默认是主分支或者第一个分支)
        2. --depth x     指克隆深度,代表只克隆几次提交
// 连接
git remote add <name> <url>  连接远程仓库,名称默认是origin
git remote remove <name>     移除远程目录

// 推送拉取
git push [-u] <origin> <master>  推送, 指定远程仓库以及分支名称,其中master代表本地的master以及远程仓库的master,如果名称不对应,可以另外指定,如master: main
git pull 拉取 , 指定远程仓库以及分支名称,git push origin develop:master,将远程仓库origin的develop分支合并到master分支上。
建议用-u进行关联,就可以直接git push和git pull了。