《Git 快速入门 以及 常用基本命令》
2023/2/17
Lesson01:什么是Git?
Git是一套程序源代码的分布式版本管理系统,最初用于管理Linux核心代码的开发,后来被多个开源工程采用,现在已经成为互联网协作开发的标准的源代码管理软件。
官方网站
Git安装
Git初运行
$ git version
Git在线体验
采用Git的云服务
- GitHub
- gitee(oschina)
- 等等
Lesson2: 代码开发流程
- 系统开发,编写代码
- 提交代码给Git本地库
- 将代码提交到Git远程库,分享给团队其他人
- 从远程库获取最新代码
- 继续修改编写代码
- 重复第二步及以后的操作
Git基础概念
这是本期重点,这些基础概念必须掌握。
- 本地工作文件夹
- Git索引区(Stage)
- Git库(Repository)
- local:本地库
- remote:远程库(服务器端)
Lesson 3: 建立一个Git库
$ git init
设置基础信息
$ git init
$ git config -l
$ git config --global user.name "koma"
$ git config --global user.email "koma@komavideo.com"
$ git config --global color.ui true
$ git config -l
方便的命令
$ git config --help
$ git help config
Lesson04: 第一次提交(commit)
知识点
- 建立文件(本地工作文件夹)
- 追加文件(索引区)
- 提交文件(本地库)
实战演习
$ mkdir myweb
$ cd myweb
#建立本地Git库
$ git init
#编辑(修改)本地文件
$ nano index.htm
...
...
#本地工作文件夹状态确认
$ git status
$ git add index.htm
#本地工作文件夹状态再次确认
$ git status
#将索引区内容提交本地库
$ git commit -m "created index.htm"
#查看提交历史
$ git log
Lesson05: 查看提交履历
知识点
- git
log命令的使用
实战演习
$ git log
$ nano index.htm
...
...
$ git add index.htm
$ git commit -m "added code."
$ git log
$ git log –oneline #用一行扼要现实git log
$ git log -p
$ git log --stat
$ git log --help
Lesson06:
把握Git状态
知识点
- git
status
- git
checkout -- [file]
实战演习
$ nano index.htm
...
...
$ git status
$ git checkout -- index.htm
$ git status
$ nano index.htm
...
...
$ git add .
$ git reset HEAD index.htm
$ git checkout -- index.htm
$ git status
...
$ nano index.htm #modify the file, action2
$ git add .
$ git commit -m ‘add new’
$ git reset HEAD index.htm
$ git checkout -- index.htm #This will change it back before action2
$ git status
Lesson07
比较修改内容
知识点
- git
diff [--cached]
实战演习
$ nano index.htm
...
...
#工作文件夹比较
$ git diff
#把修改文件追加到索引区
$ git add index.htm
#无法比较工作文件夹的修改文件
$ git diff
#索引区比较
$ git diff --cached
Lesson08
Git文件操作
知识点
- git
add [file1 file2 ...]
- git
add .
- git rm
- git mv
实战演习
$ nano index.htm
...
$ nano style.css
...
$ git add .
$ git status
$ git mv index.htm index.html
$ git status
$ git rm --cached style.css
$ git status
Lesson09:
Git忽略管理
设置Git忽略的文件,这些文件不参与Git库的提交和管理。(例如:Node.js的[node_modules]文件夹)
知识点
- .gitignore
帮助网页:
https://git-scm.com/docs/gitignore
实战演习
$ nano test.tmp
...
$ git status
$ nano .gitignore
...
*.tmp
...
$ git status
$ mkdir subdir
$ nano subdir/my.css
...
$ git status
$ nano subdir/my.tmp
...
$ git status
Lesson10:
更新最后的提交
知识点
- git
commit -m "commit message"
- git
commit --amend
- git
commit -am "commit message" [--amend]
实战演习
$ nano index.htm
...
$ git add .
$ git commit -m "modified."
$ git log
# remove debug info.
$ nano index.htm
...
$ git add .
$ git commit --amend
$ git status
$ git log
Note:
git commit -am 'detailed message
for -am'
https://stackoverflow.com/questions/19877818/git-commit-m-vs-git-commit-am
Using the option -am allows you to
add and create a message for the commit in one command.
啥时候会用到amend呢,有时候疏忽,把用户名密码提交了,这肯定不能留痕,所以 用amend 把以前的修改覆盖掉,这样就没事了
Lesson11:
返回过去1
知识点
- git
reset --hard HEAD # 返回到最后1次提交
- git
reset --hard HEAD~ # 返回到倒数第2次提交
- git
reset --hard HEAD~n # 返回到倒数第n次提交
实战演习
$ git status
$ nano main.html
...
#建立多个提交履历(5个以上)
...
$ git add .
$ git commit -m "1...5"
$ git status
$ git add .
$ git log
$ git reset --hard HEAD #z这个例子中是把git 管理的代码库自从最后一次提交后的所有修改全部删除
$ git log
$ git reset --hard HEAD~
$ git log
$ git reset --hard HEAD~2
$ git reset --hard <SOME_COMMIT> # can move the specific commit
Lesson12
返回过去2
知识点
- git
reflog [-n num]
- git
reset --hard [commit_id]
实战演习
返回过去之后,通过git reflog命令找到现在的位置(commit_id),再从过去返回回来。
$ git log
$ git reset --hard HEAD~2
$ git reflog
* git reset --hard [commit_id]
Reference logs, or
"reflogs", record when the tips of branches and other references were
updated in the local repository. Reflogs are useful in various Git commands, to
specify the old value of a reference. For example, HEAD@{2} means "where
HEAD used to be two moves ago", master@{one.week.ago} means "where
master used to point to one week ago in this local repository", and so on.
See gitrevisions(7) for more details.
Lesson13
使用分支
Git分支功能对于项目开发中的团队合作有着非常重要的作用,同时对于生产环境的更新管理也起着不可替代的作用,是Git最重要的功能。
在项目开始前,应该首先对Git分支的管理有一个明确地规划,明确每个分支的功能和担当者,这样才会保证项目正常推进,不至于陷入混乱。
知识点
- git
branch [name]
- git
checkout branch_name
实战演习
$ git branch
$ git branch dev
$ git checkout dev
$ nano style.css
...
$ git add .
$ git commit -m "modified style.css."
$ git log
$ git checkout master
$ git log
Lesson14
合并分支
知识点
- git
merge
- git
branch -d [name]
实战演习
$ git branch
$ git checkout dev
$ nano index.htm
...
$ git add .
$ git commit -m "modified1."
$ git log
$ git branch
$ git checkout master
$ git log
$ git branch
$ git merge dev
$ git log
$ git branch -d dev #删除dev分支
$ git branch
Lesson15
制造分支冲突
当团队中多人同时编辑一个文件的时候,难免会出现源代码的编辑合并冲突的问题,那么我们该怎么解决呢?
知识点
- 做一个源代码冲突的场景
- git
checkout -b [branch_name]
实战演习
$ git checkout -b dev
$ nano index.htm
...
$ git add .
$ git commit m "modified by dev."
$ git checkout master
$ nano index.htm
...
$ git add .
$ git commit -m "modified by master."
$ git branch
$ git merge dev
#出现源代码版本冲突,需要手动进行合并解决
Lesson16
解决分支冲突
知识点
- git
merge [branch_name]
实战演习
$ git branch
$ git checkout master
$ git merge dev
$ nano index.htm
...
$ git add index.htm
$ git commit -m "merged by leader."
$ git log
$ git branch
Lesson17 使用Tag标签
知识点
- 系统版本号管理
- git
tag [tag_name] [commit_id]
- git
show [tag_name]
- git
tag -d [tag_name]
系统版本号管理
任何软件系统,应用程序在发布时都应该给一个版本号,来管理每次发布的内容,便于今后的管理。
例如:
1.1.4
NNN.abc.xxx
- NNN:大版本号
- abc:每次做出的小更新时,发布的版本号
- xxx:每次bug修正时发布的版本号
实战演习
$ git tag
$ git tag v1.0.0
$ git tag
$ nano index.htm
...
#修正bug1
...
$ git add .
$ git commit -m "fixed bug1."
$ git tag v1.0.1
$ git tag
$ nano index.htm
...
#修正bug2
...
$ git add .
$ git commit -m "fixed bug2."
$ git tag v1.0.2
$ git tag
$ nano index.htm
...
#新功能追加
...
$ git add .
$ git commit -m "added feature1."
$ git tag v1.1.0
$ git tag
$ git show v1.0.1
$ git show v1.0.2
Lesson18 使用别名
在Git中可以将经常使用的命令以别名缩写的方式简化使用。
知识点
- git
config --global alias.[name] [command_name]
实战演习
#将checkout命令简化为co
$ git config --global alias.co checkout
#将branch命令简化为br
$ git config --global alias.br branch
#将commit命令简化为cm
$ git config --global alias.cm commit
#将status命令简化为st
$ git config --global alias.st status
$ git br
$ git co dev
$ git st
$ git config -l
当然这种别名的定义根据每个人的使用习惯不同而不同,也可以在项目开始前作为项目的统一规则制定下来,使每个项目开发成员都统一使用一套大家都认可的别名,这样提高项目组内部的沟通效率。
Lesson19 玩转开源中国Gitee
本期课程为您讲解如何使用Git命令连接远程服务器,如果编写提交代码到服务器端,完成团队的协同开发。
知识点
- git
clone [url]
- git
remote -v
- git
push [origin] [master]
操作步骤
- git clone 把远程库克隆到本地文件夹
- 编辑本地文件夹的文件
- 提交编辑的文件到本地信息库(git add ./git commit)
- 将本地库同步(sync)到远程Git服务器
实战演习
通过操作开源中国LearnOSC库,为您展示如何使用分支,如果提交代码,让您了解整个Git远程库的使用过程。
$ git clone https://gitee.com/komavideo/LearnOSC
$ cd LearnOSC
$ git status
$ git branch
$ git branch -a
$ git branch dev remotes/origin/dev
$ git branch
$ git checkout dev
$ git status
$ nano README.md
...
git config --global color.ui true
...
$ git add .
$ git commit -m "为初期设定增加color.ui选项"
$ git status
$ git remote -v # 检查远端服务器设置
$ git push origin dev