初始化本地库
获取Git库有两种方式:
- 一种是直接在工作目录下创建一个新的Git库
- 另一种是从已有的库中克隆
创建新的Git库
方式一:
$ git init
该命令会在工作目录下创建一个.git目录(用于存放项目的版本历史、配置文件等)。
方式二:
$ git init [git_name]
Git将在工作目录下,创建一个名为git_name的文件夹,而.git目录存放在该文件夹中。所以可以简单地理解为,创建一个名为git_name的项目。
从现有库中克隆
克隆的命令为:
$ git clone [url]
该命令将会从url中表示的代码库中,将整个代码库都保存下来,并提取出最新版的文件版本。
例子:
该示例,将会在工作目录下,创建一个test目录,然后从git://github.com/test/test.git上将所有版本下载下来,并提取出最新版本。
$ git clone git://github.com/test/test.git
与上面相同,这里可以在命令最后添加一个git_name字段,用于指定新项目目录的名称。
$ git clone git://github.com/test/test.git testgit
关于Git本地厂库初始化引用:我的Git教程 之 初始化本地库。作者:scutwang
设置标签
作用:
区分不同开发人员的身份。
辨析:
这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。
命令
- 项目级别/仓库级别:仅在当前本地库范围有效
git config user.name username ##username为用户名##
git config user.email 1540473@qq.com
信息保存在.git/config目录下:
[user]
name = lc
email = 1548570473@qq.com
- 系统用户级别:登录当前操作系统的用户范围
git config --global user.name username ##username为用户名##
git config --global user.email good@163.com
信息保存位置:~/.gitconfig文件中。
-
优先级别
- 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别签名
- 如果只有系统级别的签名,就以系统用户级别的签名为准
- 二者都没有不允许
基本操作
状态查看
git status
查看工作区、暂存区状态
添加操作
git add [filename]
将工作区的“新建/修改”添加到暂存区
提交操作
git commit -m "commit message" [filename]
将暂存区的内容提交到本地库
查看历史记录
方式1:
git log
显示结果:
commit 420300a4acb7e38d5fc263666c251d5e1ca80608 (HEAD -> master)
Author: lc <1548570473@qq.com>
Date: Tue Jun 12 10:31:39 2018 +0800
second update file
commit 96e4329179cfd87adda38f2054b2711fc7af9467
Author: lc <1548570473@qq.com>
Date: Tue Jun 12 10:22:28 2018 +0800
first update file
commit de9d70393c4eb6cef3046fab6f40a8df93392e34
Author: lc <1548570473@qq.com>
Date: Tue Jun 12 10:11:35 2018 +0800
first commit file
方式2:
git log --pretty=oneline
显示结果:
420300a4acb7e38d5fc263666c251d5e1ca80608 (HEAD -> master) second update file
96e4329179cfd87adda38f2054b2711fc7af9467 first update file
de9d70393c4eb6cef3046fab6f40a8df93392e34 first commit file
方式3:
git log --oneline
显示结果:
420300a (HEAD -> master) second update file
96e4329 first update file
de9d703 first commit file
方式4:
git reflog
##如果是回到历史版本后,该方式可以站在当前版本处,可以查看之前的历史版本##
显示结果:
420300a (HEAD -> master) HEAD@{0}: reset: moving to 420300a
fa16aa4 HEAD@{1}: commit: delete a.txt
420300a (HEAD -> master) HEAD@{2}: reset: moving to 420300a
de9d703 HEAD@{3}: reset: moving to HEAD~1
96e4329 HEAD@{4}: reset: moving to HEAD^
420300a (HEAD -> master) HEAD@{5}: reset: moving to 420300a
96e4329 HEAD@{6}: reset: moving to 96e4329
420300a (HEAD -> master) HEAD@{7}: commit: second update file
96e4329 HEAD@{8}: commit: first update file
de9d703 HEAD@{9}: commit (initial): first commit file
##HEAD@{number}:表示移动多少不可以到达该历史状态。
前进后退
方式一:基于索引操作
git reset --hard id
## hard参数:让工作区间和缓存区间都回到历史版本##
##版本索引id,可以通过git log 查看。
例子:
git reset --hard 420300a ##表示回到历史版本为420300a的版本##
方式二:基于^符号
git reset --hard HEAD^
##该方式只能回到历史,不能前进到现在##
##一个^符号代表回到前一个历史版本,连个代表回到第二个,.....##
例子:
git reset --hard HEAD^^
##表示回到当前版本的以前连个版本处##
方式三:使用~符号
git reset --hard HEAD~number ##number代表回到前几个版本##
##该方式也只能后退,不能前进##
例子:
git reset --hard HEAD~2
## 表示回到历史版本以前两个版本##
reset 命令的三个参数对比
-
–soft参数
仅仅在本地仓库移动HEAD指针
-
–mixed参数
在本地仓库移动HEAD指针,重置缓存区
-
–hard参数
在本地库中移动HEAD指针,重置缓存区和工作区
删除文件并找回
前提: 删除前提,文件存在时的状态提交到了本地库。
操作:
- 删除操作已经提交到本地库:指针位置指向历史记录。
git reset --hard [历史指针位置(也就是删除前历史版本)]
- 删除操作尚未提交到本地库:指针位置指向HEAD
git reset --hard HEAD
比较文件差异
- 将工作区中的文件和暂存区进行比较。
git diff [filename]
例子:工作区间中的apple.txt和本地缓存进行比较
git diff apple.txt
- 将工作区中的文件和本地库历史记录比较
git diff [本地仓库中历史版本] [filename]
例子:工作取件中的apple.txt和本地仓库中最新记录比较。
git diff HEAD apple.txt
- 不带文件比较工作区中的所有文件
## 比较工作区和缓存取的所有文件##
git diff
## 比较工作区和本地仓库中所有文件##
git diff [本地仓库中的历史版本]
分支操作
- 创建分支
git branch [分支名]
- 查看分支
git branch -v
- 切换分支
git checkout [分支名]
- 合并分支
第一步:切换到接收修改的分支(被合并,增加新内容)上。
git checkout [被合并的分支名]
第二步:执行merge命令
git merge [有新内容分支名]
- 解决冲突
冲突的表现:
<<<<<<< HEAD
bbb
=======
aaaa
>>>>>>> hot_fix
解决冲突:
第一步:编辑文件删除特殊符号。
第二步:把文件修改到满意程度保存退出
第三步:git add [filename]
第四步:git commit -m “commit message”
注意:此时commit一定不能带具体文件名