Git快速入门系列文章
- Git快速入门-安装配置篇
- Git快速入门-常用命令之独奏篇
- Git快速入门-常用命令之交响乐篇
- Git快速入门-git stash 暂存变更,git reset 撤销commit,git revert 回退远程版本库
Git入门系列第二篇,介绍日常开发中,假设只有你一个人使用Git时常用的命令。
git config --global user.name "flysqrlboy"
git config --global user.email "[email protected]"
注:git config 命令有3个级别的范围参数,分别是global、local和system,建议google一下他们的区别。
假设你刚刚在Github上创建了一个Project,它的Git地址为[email protected]:flysqrlboy/learn-git.git。这个项目里面什么文件也没有。而现在我们在本地有一套项目代码,在test-project目录下,有两个文件:
$ ls test-project/
a.txt b.txt
现在想把它托管给Github,则可以通过下面的命令完成
cd test-project
git init
git remote add origin [email protected]:flysqrlboy/learn-git.git
git add a.txt b.txt
git commit -m 'commit initialize'
git push origin master
假设现在团队里另外一个成员加进这个项目了,他也需要为这个项目贡献代码。那么他要做的第一件事就是把代码从Github上克隆(clone)下来,如下:
git clone git@github.com:flysqrlboy/learn-git.git
clone下来后,可以看看提交日志:
$ git log --stat --pretty=full
commit 37510d9d26ec125148815a596a6345176d65dc27
Author: flysqrlboy .com>
Commit: flysqrlboy .com>
commit initialize
a.txt | 1 +
b.txt | 1 +
2 files changed, 2 insertions(+)
可以看到,这个项目有一次提交,commit的唯一ID(37510d9d26ec125148815a596a6345176d65dc27),提交人(flysqrlboy),commit的说明(commit initialize),和提交了哪些文件等信息。
$ git branch
* master
星号表示当前所在分支,是master。clone下来默认在master分支内。
现在需要建一个新分支, 代码都提交到这个分支上。首先通过checkout命令创建分支:
$ git checkout -b f_test_1.2.0
Switched to a new branch 'f_test_1.2.0'
$ git branch
* f_test_1.2.0
master
checkout 命令加上-b 选项 可同时完成创建新分支和切换到该分支上。
现在开始工作了:修改a.txt ,删除b.txt,增加c.txt,如下
$ echo "add something" >> a.txt
$ rm b.txt
$ echo "add by flysqrlboy" > c.txt
$ ls
a.txt c.txt
前面红色字样 M - Modify, D- Delete,?-新增(新增文件是2个问号)
上面的修改能不能直接提交?试验下:
提交成功了吗?看下提交日志:
只有第一次的提交记录,说明刚刚的提交没有成功。留意上面git commit不成功后的提示“Changes not staged for commit” 一句,意思是说:下列修改没有加入到暂存区(stage),不会被提交。暂存区?什么东东? 下面简单说下Git的3个文件区域:工作区、暂存区、版本库。我们平时做的修改、新增、删除文件是针对工作区的,只有执行git add 命令后才会把工作区的变动提交到暂存区;执行git commit命令后,才把暂存区的变动提交到版本库。执行git push 命令后,把版本库的变动提交到远程代码仓库。为了能成功提交,我们先把上面所在的改动从工作区提交到暂存区吧。
加上-i 选项的 git add 是个很有Geek范的命令! 它的作用是让我们能挑选哪些文件来提交到暂存区。下面我们用它来把改动提交到暂存区。
最后输入7 或者 q 退出 git add -i 。 这时再输入git diff 发现已经没有差异输出,因为工作区和暂存区里的文件已经没有差异。嗯,这也说明git diff 是比较工作区和暂存区的。
好,commit一下:
$ git commit -m 'commit by flysqrlboy'
3 files changed, 2 insertions(+), 1 deletion(-)
delete mode 100644 b.txt
create mode 100644 c.txt
下一步就是把这次提交push到远程代码库即GitLab上了。
$ git push origin f_test_1.2.0
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 321 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To [email protected]:zhangsiwei/test.git
* [new branch] f_test_1.2.0 -> f_test_1.2.0
这次push也顺便把新建的分支f_test_1.2.0提交到远程Gitlab了。 当然在本地新创建的分支可以在git checkout -b 后执行git push 推送到远程,不必等到有commit后再push。
本文介绍了一个人操作git时常用的命令: