发布于 

git 命令笔记

本地提交到服务器

查看本地状态

1
git status

git add把文件添加进去,实际上就是把文件修改添加到暂存区

1
2
git add .		# 提交所有
git add src/ # 提交src下的文件

git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支

1
git commit -m "测试提交"

git push把文件推送到远程库

1
git push

版本回退 git reset

Git 中HEAD表示当前版本,上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成 HEAD~100

1
git reset --hard HEAD^
  • HEAD 指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit_id

  • 穿梭前,用 git log 可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本。

查看提交日志 git log

git log命令显示从最近到最远的提交日志

退出 :q

1
git log

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数

1
git log --pretty=oneline

工作区和暂存区的概念

工作区

电脑里能看到的目录为工作区

暂存区

工作区里有一个隐藏目录 .git,这个就是Git的版本库。

其中最重要的就是称为 stage(或者叫做 index )的暂存区,还有Git为我们自动创建的第一个 master,以及指向 master 的一个指针叫 HEAD

往版本库修改(或添加)文件的时候分两步执行

  • git add 把文件添加进去,实际上就是把文件修改添加到暂存区。
  • git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。

一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:

nothing to commit, working tree clean

工作区与版本库比较 git diff

git diff 是工作区跟仓库(仓库也叫版本库)的比较,这个时候可以看你开发过程中修改了那些内容

git diff --cached 是看你 stage (暂存)区和仓库(版本库)分支上的比较,你 add 后但是没有 commit, 这个时候只是在 stage 中,可以确认下修改是否正确,如果正确无误可以 commit 合并到分支

为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。

你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。

撤销更改 git restore

每次修改(新增)文件后都要 git add 到暂存区,否则就不会加入到 commit

如果文件已经 git add 到暂存区了,但是没有 commit 提交

可以使用 git restore --staged<file> 将文件从暂存区撤出,但是不会撤销工作区文件的更改

使用 git restore --staged config/dev.env.js 命令后,测试提交可以看到只提交了两个文件,因为 commit 只会提交暂存区里的文件。

config/dev.env.js 虽然撤出了暂存区,但是工作区文件的更改并没有撤销,可以 git status 查看

同样Git给出了提示可以使用 git restore <file> 将不在暂存区的文件撤销更改(即:git status 提示的被修改但未被加入暂存区的内容,会被撤销)。

这里有个区别,工作区修改了但是未加入暂存区的使用

git status 查看文件状态是红色的,加入暂存区未提交的状态是绿色的

1
git restore config/dev.env.js

工作区的修改被撤销,working tree clean

提示:如果修改的文件已经提交到版本库(但是没有 push 到远程库可以参考版本回退

版本已经回退至上个版本

删除文件 git rm

在Git中,删除也是一个修改操作,新工作区中新建一个 test.txt 添加到暂存区并且提交:

一般情况下在工作区你直接把没用的文件删除了或者使用rm命令删了:

1
rm test.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status 命令会立刻告诉你哪些文件被删除了:

同样Git给出提示,你有两个选择,一确实要从版本库中删除该文件,使用 git rm 删除,并且 git commit

或者使用 git restore <file> 撤销更改

1
2
3
git rm test.txt

git commit -m "删除测试文件"

现在文件就从版本库中删除了 git diff 没有返回信息则表示工作区和版本库一致。

分支管理

查看分支

1
git branch

创建分支

创建 dev 分支,并切换到 dev 分支上

1
2
3
4
5
git checkout -b dev
# 新版本使用 switch 切换

# 创建并切换分支
git switch -b dev

git checkout 命令加上 -b 参数表示创建并切换,相当于以下两条命令:

1
2
3
4
5
$ git branch dev		# 创建分支

$ git checkout dev # 切换分支

Switched to branch 'dev'

合并分支

例:将 dev 分支的内容合并到 master 分支

首先切换到 master 分支

1
git checkout master

使用 git mergedev 分支的内容合并到当前(master)分支

如果多人开发的话需要 git pull 一下

1
git merge dev

删除分支

删除本地分支

1
git branch -d dev

删除远程分支

1
git branch -r -d origin/branch-name

拉取远程新分支

如果远程新建了一个分支,本地没有该分支。

可以利用 git checkout --track origin/branch_name ,这时本地会新建一个分支名叫 branch_name ,会自动跟踪远程的同名分支 branch_name

1
git checkout --track origin/branch_name

本地新分支推送到远程库

如果本地新建了一个分支 branch_name,但是在远程没有。

这时候 pushpull 指令就无法确定该跟踪谁,一般来说我们都会使其跟踪远程同名分支,所以可以利用 git push --set-upstream origin branch_name,这样就可以自动在远程创建一个 branch_name 分支,然后本地分支会(跟踪)track 该分支。后面再对该分支使用 pushpull 就自动同步。

1
git push --set-upstream origin branch_name

场景1:新建本地仓库,需要关联远程仓库

1
git init

关联远程远程仓库 git remote add origin XXXX

1
git remote add origin http://192.168.1.66:8088/robot_admin_system/browser_server/uo_vue_frontend.git

关联后使用 git remote -v 来查看是否关联成功

1
git remote -v

同步远程仓库到本地

此时 pull 下来的是远程库的所有分支

1
git pull

使用 git branch 并不会显示分支,其实已经下载下来了,需要手动 checkout 到分支

1
git checkout master

git branch 就显示本地分支了

1
git branch

显示远程分支

1
git branch -a

场景2:切换关联的远程仓库

删除远程关联

1
git remote rm origin

一旦你使用这种方式删除了一个远程仓库,那么所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除。

再查看远程分支没有则删除关联成功

继续场景一第一步即可

1
git remote add origin xxxxx

后续补充中。。。