1. 创建本地版本库
1) 目标路径创建文件夹
安装Git后,可运行开始菜单栏/Git安装路径下的"Git bash",通过cd命令进入到合适的位置后,借助以下命令创建本地版本库:
$mkdir filename
$cd filename
$pwd
第一行代码用于创建一个名字为“filename”的文件夹;cd命令进入到此文件夹;pwd命令显示当前所在路径。
注意:
1. 本地版本库所在路径不能含有中文字符,以免出现奇怪的报错;
我的问题:
1. 如何通过cmd命令执行以上操作?我点击路径栏输入cmd后,打开cmd窗口,在输入git,显示如下图:如此显示证明cmd探测到了我安装的git,但如何在此窗口输入并运行git命令?(目前输入会报错,显示命令无法识别)
2) 用Git初始化该文件夹
$git init
这条命令的作用是将当前路径(目录)变成Git可以管理的仓库:命令执行后会在当前目录下生成一个隐藏的.git目录,该目录下保存了Git跟踪本地仓库修改的记录。本地仓库的概念也就是指这里的.git目录。
2. 远程仓库<—>本地仓库&暂存区&工作区代码的交互
2.1 整体架构
上图解释了远程仓库与本地工作区之间代码交换的过程和整体的架构:
其中,
workspace:本地工作区;
Index:本地暂存区,也叫stage区;
Repository:本地仓库;
Remote:远程服务器(里面应该还分暂存区和远程仓库,便于远程服务器管理人员决定将哪些代码添加到最终的远程仓库中)。
2.2 远程仓库—>本地的Git命令流程:
2.3 本地—>远程仓库的Git命令流程:
2.3.1 新代码文件首次提交
① $git add <filename>
作用:将本地工作区的代码提交到本地暂存区;
说明:<filename>包括文件/文件夹的相对路径(所以可以用cd命令先进到文件所在路径)和名称,"<>"不是必须的格式,这里只用于形式表现;使用VSCode开发时,可以点击Source Control-Changes下需要add文件右边的+号,一键add到stage区。
例子: $git add Makefile 添加的一个文件(该文件无后缀) ; $git add source/ 添加的一个文件夹内的所有文件
② $ git commit -m "comment"
作用:将本地暂存区的内容提交到本地仓库;
说明:“comment”表示注释内容,可以用相关注释文本替代引号内的comment。
例子: $ git commit -m "Add <User_Guide> zh doc" 表示提交了一个名叫"User_Guide"的中文文档,注释的格式没有要求,但需要简介明了。
③ $ git push origin HEAD:refs/for/master
作用:将本地仓库的内容提交到远程服务器对应的分支;
说明:origin是远程仓库的代称(不成文的规定),HEAD是指针,指向远程仓库的master分支。可以多次git add后一次push,会根据各自的目录路径提交上去;注释与每次将暂存区内容提交到本地仓库的操作挂钩,所以多个注释会和各自的git commit 内容一一对应。
我的问题:
1. 为什么代码从本地工作区—>本地仓库需要经add、commit两步?
答:也许是为了方便误交/误改时及时止损;类比超洁净工作间进入时的多级房间。两者的区别是:add命令可以多次执行,每次add一个或多个文件;commit命令一次执行,执行一次则把所有的index/stage区内的文件提交到本地仓库。
FAQ
2.3.2修改代码后重新提交代码的Gti命令流程
VSCode-Source Control标记含义:
从来没有add过的文件会在VSCode-Source Control显示“U”表示untracked(未被追踪);
add过但后来修改了的文件会在VSCode-Source Control显示“M”表示modified;
我的问题
1.以上的"U"和"M"是本地工作区的文件相对本地仓库中的文件而言的?
答:感觉是的,因为自拉取远程服务器仓库代码后,就没有时时的远程仓库代码最新信息了,所以U/M标记因该是Git对比本地工作区和本地仓库后得出的。
②$git commit --amend
作用:将处于暂存区内的,修改过的文件重新提交到本地仓库,并覆盖之前的文件
说明:
3.4 FAQ
1. 报错“missing Change-Id” ,按照给出的提示操作即可
2. 使用git怎么撤销本地(工作区)修改,暂存区修改,版本区(本地仓库)修改,以及远程仓库的提交
将暂存区的代码 $git reset后,恢复到工作区并没有覆盖掉本地工作区的文件(今天尝试了是这样,具体是不是有待教程验证)
3. 常见命令$执行效果
1. $git status
作用:查看本地版本库的状态:文件在本地工作区、本地暂存区(index)、本地仓库的状态。
说明:执行该命令后,会显示但不限于以下信息:①本地仓库分支情况;②未被add到index的文件更改;③add到index但未被commit到repository的文件更改;
例子:
①本地仓库内有但是被更改过且没有更新到本地仓库的文件,会如下显示:"Changes not staged for commit:"
②本地仓库没有但是本地工作区有的文件,会如下显示:"Untracked files:"
2. $git diff
作用:
说明:
例子:
2. ls
3. pwd
4. rm -rf
5. git status on branch master
6. git config
7. git log 显示提交日志,退出按q
8. git fetch origin
9. git rebase origin/master
我的问题
1. $git commit 和$git commit --amend的区别?
参考资料
1. 廖雪峰 GIT教程