重中之重——先拉代码
每次提交代码之前,养成良好的习惯,先 pull
一下代码。不 pull
代码万一导致代码冲突了就不美了。
命令: git pull
接下来,就是正常流程了,现在的代码编辑器,例如:Visual studio code
等,对 git
的支持已经很好了,我们只需要用鼠标 点点点 就能把代码提交上去。
滴滴···废话警告:
- 但是!身为一个优秀的 人与虚拟世界友好交互通信的奠基人员,焉能拘泥于鼠标 点点点?
- 我们必须要对网络上那些能一秒敲千行代码的高人心存向往,再说了使用命令行不香吗?不帅吗?
- 接下来我就来说一下使用命令行怎么搞…
安排:
中间插一句:要会使用git status
,嗯,对,没错,就是要会使用这个。
随时敲git status
随时有惊喜。
第一步:把更改的代码暂存起来
# 此命令会把所有更改的文件全部暂存起来。
git add .
# 如果要单个来,只需要 . 替换成对应的文件名即可。
git add temp.txt
灵魂拷问:为什么要暂存代码?答案传送门
如何取消暂存的更改呢?
- 答案:
git reset HEAD <file>...
- 说人话:请使用
git status
看看。
第二步:把暂存的改动提交到本地的版本库
# -m 参数表示可以直接输入后面的 message,简要说明这次改动。
git commit -m "xxx"
每次 git commit
之后,都会在本地版本库中生成一个 哈希值,就是 commit-id
,这个 id 在进行版本回退的时候有大用。
如何获取执行历史版本的代码?答案传送门
保不齐有人对暂存区这个东西感觉很多余,那么还可以在commit 之后加一个
-a
参数。
- 加的 -a 参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过
git add
添加到暂存区。- 例如:
git commit -a -m "xxx"
第三步:将本地的分支版本上传到远程并合并
# git push 的命令格式一般是
git push <远程主机名> <本地分支名>:<远程分支名>
例如:git push origin master:master
当然,一般情况下,我们都不用写后面的,直接 git push 即可。
git push
执行完毕,本次代码提交就完成, 就可以在远程仓储上看到我们推送的代码啦。
为什么要暂存代码:
-
这就牵扯到一个古老的问题了,要知道在
SVN
出现之前,第一代源代码管理工具如VSS,CVS
,其实没啥好说的,就是三个字:不方便 -
SVN 出现之后,出现了一个名词 原子性提交,即每一次提交都是由多个文件的修改组成的,这些修改提交时,要么全部成功,要么全部失败。
- 虽然不够完美,但是好处也是显而易见的,比如:代码回退 就变成很简便了。
-
在说回
git
,git 当然对 SVN 的优良特性也进行了借鉴,但是 Linus 发现在命令行下选择要提交的修改,是一件很麻烦的事情,所以,Linus 就在 commit 之前,发明了一个暂存区的概念,可以随意的把各种修改的文件放进去,这样就可以用多个指令精确的挑选出我们需要提交的所有修改,然后再一次性的(原子性的)提交到版本库,问题就完美的解决了 。
小技巧:
对于一个新建的存储库来说,我们第一次提交代码,可以按照githup上的提示一步步提交代码,这样虽然也还好,但是有个更简便的方法:
- 直接
git clone xxx
这个新存储库,此时我们会得一个以存储库名字命令的,带着一个名称为git
文件夹的非空文件夹。 - 把
git
文件夹拷贝到我们的项目根目录下。 - 然后按照上面的流程走一遍即可。
完结·撒花