Git命令
1. 需掌握的Linux常用命令
clear: 清除屏幕上的窗口内容
echo 'text content': 往控制台输出信息 "text content"
II: 将当前目录下的子文件或者子目录平铺在控制台
find '目录名(./)': 将对应目录下的子孙文件或者子孙目录平铺在控制台
find '目录名' -type f: 显示出对应的子文件,没有目录
rm '文件名': 删除对应的文件,输入一两个文件名的字母,点击 tab 可以自动补全文件名
mv '旧文件名' '新文件名': 更改名字
cat '文件名': 查看文件内容
vim '文件名'(输入法为英文模式):
按 i 进行插入修改,进行文件的编辑
按 esc 在下面输入 : 进行操作
q! 强制退出(不保存)
wq 保存退出
set nu 设置行号
2. 初始化仓库配置
昨天在 Git的介绍…(一) 中对初始化仓库配置没有做到很细的解释说明,因此在这里重新写一遍
2.1 配置信息注意点
注意:安装完 git 一定要先配置用户信息,不能跳过这一步,否则会出现无法提交的问题, 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改!!!
2.2 系统中对所有用户都普遍适用的配置(系统)
git config --system user.name XXX // 配置当前系统用户名
git config --system user.email XXX.com // 配置当前系统用户邮箱
2.3 用户目录下的配置(windows)
git config --global user.name XXX // 配置当前window用户的用户名
git config --global user.email XXX.com // 配置当前window用户的用户邮箱
2.4 当前项目的Git目录中的配置(当前项目)
git config user.name “xxx” // 配置当前项目用户名
git config user.email xxx@qq.com // 配置当前项目用户邮箱
2.5 查看和删除用户信息
git config --list // 检查已有配置信息
git config --global --unset user.email // 删除配置用户信息
3. 乱码
乱码分两种情况,一种是 git status查看状态时乱码,另一种是终端乱码
- 3.1 git status乱码
使用命令
git config --global core.quotepath false
- 3.2 终端乱码
菜单 -> 设置 -> 文本 - > 本地 / 编码
或者修改配置文件
[gui]
encoding = utf-8
# 代码库统一使用utf-8
[i18n]
commitencoding = utf-8
# log编码
[svn]
pathnameencoding = utf-8
# 支持中文路径
[core]
quotepath = false
# status引用路径不再是八进制(反过来说就是允许显示中文了)
4. 文件目录操作命令
pwd : 显示当前目录的路径
cd * : 进入某个了路径,*指的是你要进入的文件夹路径,直接拖拽放到git窗口里面,因为git不能粘贴
ls -a : 简化版打开当前目录的所有文件
ls -all : 打开当前目录的所有文件(包含文件大小,日期等)
mkdir * : 创建一个文件夹,*指的是你即将创建的那个文件夹名字
touch * : 创建一个文件.*指的是你创建文件的名字,后面的格式可以自定义 比如 1.txt 1.html
echo '' > * : 创建文件,并在里面输出内容, ''为你想写入的内容, * 你定义的文件名和格式
cat * : 查看某个文件的内容, * 为你想查看的文件
ll : 将当前目录下所有的子文件输出在窗口上
rm * : 删除某个文件 *为删除的文件名(不能删除文件夹)
mv '旧名字' '新名字' : 对某个文件或者文件夹换名字
find ./ : 对当前路径下的所有文件和文件夹输出在窗口中(也可以放入指定路径)
find ./ -type f : 对当前路径下的所有文件输出在窗口中(也可以放入指定路径, 注意不包含文件夹)
5. 基本流程
- 5.1 添加工作区文件到暂存区
我们需要自定义定义某个文件,这个文件就是工作区.将其通过 git add 文件名 的命令,将其从工作区放入到暂存区
-
5.2 查看状态
将工作区的文件添加为暂存区后,我们来使用 git status 命令查看状态. 这里也分两种情况的,一种是全部放入暂存区,另一种是只放入了一些进入暂存区
5.2.1 全部放入暂存区有一个很明显的样子就是显示为绿色,说明全部放入了暂存区:
5.2.2 有剩余文件没放入到暂存区,也有一个很明显的样子就是没有放入到暂存区的文件会显示红色:
-
5.3 提交到仓库
以上操作进行完后,我们就要提交给Git仓库,创建一个版本,每次提交同时会生成一个 40 位的哈希值,作为该次提交版本的唯一 id.然后我们需要填写一些版本备注信息
5.3.1 使用 git commit 回车 会调用默认或者自定义的文本编辑器进行编译备注信息,怎么填写和退出请看 1.需掌握的Linux常用命令 里面的vim模式
5.3.2 使用 git commit -m ‘备注信息’ 回车 会直接单行备注信息
5.3.3 修改默认编辑器
git config core.editor notepad
# 添加 vscode 编辑器 - mac
# 通过 vim 打开环境变量配置文件
vim ~/.bash_profile
# 添加环境变量
export PATH=/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin:$PATH
# 保存退出
source ~/.bash_profile
# 测试:在终端中直接通过命令 code 调用 vscode
git config --global core.editor "code --wait"
- 5.4 查看提交日志
我们在进行提交之后,并备注了版本信息,我们如何查看呢?
5.4.1 完整格式 git log
(完整id: fbd78fa7a658625f6e25e806e300c8facfe30645)
5.4.2 简要格式(单行) git log --oneline
(简写id:fbd78fa)
6. 删除
- 6.1 删除工作区文件
我们在前面学习linux常用指令删除文件,到这里使用git删除,我想你肯定也不会陌生,就是在 rm 删除前面,加了一个git.这种操作,只会删除你工作区内指定文件.
git rm '文件名' : 来进行删除指定文件
- 6.2 删除git仓库文件
下面这张图我们就可以明白,只是删除了git仓库里面指定的文件,并没有删除该目录下的文件.并且能看到查看状态里面,少了指定的文件
git rm --cached '文件名' : 删除git仓库指定文件
我们再删除完之后,还需要我们在进行一次提交.我们在添加文件或者删除文件时,都需要我们来进行一次备注信息
git commit -m 删除说明 : 写入你删除这个文件的删除说明
-
6.2.1 撤销删除
使用 git restore --staged '文件名' : 来进行你要撤销删除的文件 On branch master,nothing to commit, working tree clean 没有未追踪的,也没有未提交的
-
6.2.2 撤销重置
git reset : 撤销重置 从暂存区中撤销到工作区: git reset HEAD '文件名' : 从暂存区中撤销一个指定文件 git reset HEAD . : 从暂存区中国年撤销所有文件
7. 修复提交
修复提交用于替换上一次版本中备注的信息,在不增加一个新的提交版本的情况下将新修改的版本信息追加到上一次的提交版本信息中.
注意
:我们使用 git commit --amend -m ‘备注信息’ 命令来修改.修改之后我们使用 git log查看日志,我们会发现版本信息发生了改变,并且随着发生改变的还有版本的id号
8. 版本回退
有些时候,我们某些情况,觉得之前的版本不错,我们这时使用了回退版本,就会显得非常简便,历史版本之间可以随意进行切换
git reset --hard 'id' : 回退到指定的版本, 'id'为你每次提交修改版本时commit的唯一id值
9. 比较
比较命令在生活实际中比较少用,是用来 工作区和暂存区之间的比较.我们一般用 git log 查看日志,就基本可以达到我们的需求.要说用这个比较,我们用在一下情况,我们举个例了,我们上个月写一个版本2,这个月写了版本3,后来我们需要判定版本3和版本1比起来多了什么,这种情况我们才会用这个比较
git diff '文件名' : 比较 工作区和暂存区
git diff --cached [版本提交id] '文件名' : 比较 暂存区和仓库
git diff '版本提交id' '文件名' : 比较 工作区和仓库
git diff '上一个版本id' '这一次版本id' : 比较 仓库不同版本
10. 分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会耗费很多时间。
-
查看分支
默认情况下我们都是在master分支下,我们可以使用 git branch 命令查看当前所在分支 git branch : 查看本地所有分支 git branch -a : 查看远程所有分支
-
创建分支
我们创建的这条分支,以后遇到什么bug出错都只会在这个分支里面.等处理完毕之后,没有报错,后期我们可以将这条分支添加到主线上 git branch '分支名称' : 创建分支
-
切换分支
git checkout '分支名称' : 切换分支 (分支里面的mster会变成你切换的分支名字) 也可以使用 checkout -b 来新建分支 git checkout -b '分支名称' : 新建分支进行切换
-
分支合并
git merge '被合并分支' : 合并分支 git branch --merged : 查看已经合并的分支 git branch --no-merged : 查看未合并的分支
-
删除分支
git branch -d '分支名称' : 如果分支为未合并状态,则不允许删除 git branch -D '分支名称' : 强制删除
11. 合并记录
在 Git 中合并是相当容易的, 因为 Git 使多次合并另一个分支变得很容易.这意味着你可以有一个始终保持最新的长期分支,经常解决小的冲突,比在一系列提交后解决一个巨大的冲突要好.
git rebase -i HEAD~2 : 合并 HEAD 前两个祖先记录
- ~ 和 ^
~表示纵深位置,^表示横向位置.
~n和^^^^^是等价的,表示往前左侧找n级父节点
^n表示单前节点至少有n个父节点,找的是d第n个
G H I J
\ / \ /
D E F
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
A
A = = A^0
B = A^ = A^1 = A~1
C = A^2
D = A^^ = A^1^1 = A~2
E = B^2 = A^^2
F = B^3 = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2 = B^^2 = A^^^2 = A~2^2
I = F^ = B^3^ = A^^3^
J = F^2 = B^3^2 = A^^3^2
- rebase 操作
p, pick = use commit => 使用
r, reword = use commit, but edit the commit message => 使用,但重新编辑说明
e, edit = use commit, but stop for amending => 使用
s, squash = use commit, but meld into previous commit => 使用,但合并上一次
f, fixup = like "squash", but discard this commit's log message => 就像 squash 那样,但会抛弃这个 Commit 的 Commit message
x, exec = run command (the rest of the line) using shell => 执行脚本
d, drop = remove commit => 移除
git rebase -i HEAD~3
弹出编辑器,根据需要的进行修改,然后保存
如果为 r,s 则会再次弹出编辑器,修改新的 commit message,修改之后保存
如果出现一些问题,可以通过 `git rebase --edit-todo` 和 `git rebase --continue` 进行重新编辑保存
- 合并冲突
有的时候,不同的分支可能会对同一个文件内容和位置上进行操作,这样在合并的过程中就会产生冲突
1. 查看冲突文件
2. 修复冲突内容
3. 提交
小结:
修改同文件不同处,rebase和merge合并不会冲突
修改同文件同一处,合并会冲突,解决方式: rebase,解决冲突,执行add+rebase continue;merge,解决冲突,重新提交
12. 标签
如果我们写到一个重要的阶段,并对它做出一定记号,你可以使用 git tag 给它打上标签.这样以后清楚可见
- 新建 tag
假如,我们想为项目发布一个"1.0.0"版本. 我们可以用 git tag -a v1.0.0 命令给最新一次提交打上(HEAD)"v1.0.0"的标签。就可以了
git tag -a v1.0.0 HEAD/(提交id号)
-a 选项意为"创建一个带注解的标签". 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解.
-
查看 tag
git tag : 查看已有的tag标签
-
删除 tag
git tag -d 版本号 : 删除指定的tag标签
13. 总结
今天这篇内容呈现了所有git本地操作的命令,从简单目录指令->基本流程->修复提交->版本回退->分支->合并->标签,记录了我对这些命令的理解操作及注意点.了解到了git是怎么工作的.收获到了很多东西,同时也有很多细节的东西没有去深深研究.抽空一定多去看看这些方面的疑难知识点.明天再去学习 GitHub,git全套就学习完了.也同时希望能给大家带来一定的收获,不枉占用大家这么久时间来学习我对git的理解,谢谢!