在操作如何用 Git 上传管理代码至 GitHub 时常常用到的命令,当时只知道照着网站上的步骤一步一步敲命令行,但不知其所以然,所以用这篇文章记录一下笔记。

1、Git的文件状态

在用 Git 管理一个仓库的时候,会对文件有不同的状态划分,以确定这个文件是否已经归于Git仓库的管理,文件状态分为两种:未跟踪状态(untracked)和已跟踪状态(tracked)

  • 未跟踪:默认情况下, Git仓库下的文件没有添加到Git仓库管理中
    • staged:暂缓区中的文件状态,可以通过add .命令将文件添加到暂存区
    • Unmodified: 通过commit命令,可以将staged中文件提交到Git仓库
    • Modified:修改了某个文件后,会处于Modified状态;
  • 已跟踪:添加到Git仓库管理的文件处于已跟踪状态, Git可以对其进行各种跟踪管理

下面这张图可以很好的展示它门之间的关系以及变化:

git文件状态

2、常用的代码

在了解了文件状态之后,再看一下我常用的代码:

git init 
git remote add origin https://github.com/xx/xx.git 
git add . 
git commit -m "your commit"
git push -u origin main
  • git init

​ 是对本地的代码仓库进行初始化,但如果想获取其它地方的仓库则用 git clone https://github.com/xx/xx.git

​ 链接远程仓库,origin就是一个名称,在你clone一个代码库时,git为你默认创建的指向这个远程代码库的标签

  • git add .

​ 表示将所有文件添加到暂存区,注意add 和 . 之间需要加空格。如果是git add a.js 则表示只将 a.js 这个文件添加到暂存区。

  • git commit -m “your commit”

Git 在储存数据时,所有的对象都会基于它们的SHA-1 hash进行寻址。

​ 文件更新提交,再每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了,再运行提交命令 git commit。也可以将git add . git commit -m'' 两行命令合并为 git -a -m ''

  • git push -u origin main

​ 默认情况下是将当前分支(这里是main) push 到 origin 远程仓库; -u 是将本地的分支版本上传到远程合并,并且记录push到远程分支的默认值,下次继续push的这个远端分支的时候推送命令就可以简写成“git push”。

  • git push / git push origin master

​ 将代码push到远程仓库:将本地仓库的代码当前分支推送到远程仓库中;

  • git fetch / git fetch origin

​ 从远程仓库fetch代码:从远程仓库获取最新的代码

  • git merge

​ 获取到代码后默认并没有合并到本地仓库,我们需要通过merge来合并

  • git pull

​ 从远程仓库pull代码 = git fetch + git merge(rebase)

3、Git其它强大的功能

查看提交的历史

git log --pretty=oneline
git log --pretty=oneline --graph
git reflog // 所有详细操作

版本回退

git reset --hard HEAD^ // 上个版本
git reset --hard HEAD~n // 上n个版本 
git reset --hard 2d44982 // 指定某个版本的commit id

……