git 命令笔记
本地提交到服务器
查看本地状态
1 | git status |
git add
把文件添加进去,实际上就是把文件修改添加到暂存区
1 | git add . # 提交所有 |
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 | git rm test.txt |
现在文件就从版本库中删除了 git diff
没有返回信息则表示工作区和版本库一致。
分支管理
查看分支
1 | git branch |
创建分支
创建 dev
分支,并切换到 dev
分支上
1 | git checkout -b dev |
git checkout
命令加上 -b
参数表示创建并切换,相当于以下两条命令:
1 | $ git branch dev # 创建分支 |
合并分支
例:将 dev
分支的内容合并到 master
分支
首先切换到 master
分支
1 | git checkout master |
使用 git merge
将 dev
分支的内容合并到当前(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
,但是在远程没有。
这时候 push
和 pull
指令就无法确定该跟踪谁,一般来说我们都会使其跟踪远程同名分支,所以可以利用 git push --set-upstream origin branch_name
,这样就可以自动在远程创建一个 branch_name
分支,然后本地分支会(跟踪)track
该分支。后面再对该分支使用 push
和 pull
就自动同步。
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 |
后续补充中。。。