Git学习
Git就是一个分布式的版本控制工具。
它具有代码备份、版本回退、协作开发和权限控制等工作。
Linux 常用命令
ls
:(list) 查看文件夹下的列表。cd
:(change directory)。进入某一个文件夹内的。cd ..
回到上一级。使用tab可以自动补全。clear
:清屏(也可以使用ctrl + L
)mkdir
:创建文件夹(make directory)touch
:创建文件rm
:删除文件(remove)rm dir -r
:强制删除文件夹(-r 删除文件夹选项 -f 强制 force)mv test.html t.html
: 移动文件,重命名cat
: 查看文件里面的内容ctrl + c
取消命令(类似于ctrl + z
)- 上下方向键,历史命令
Vim
Vim 是一款命令行下的文本编辑器,编辑方式跟图形化编辑器不同。vim的注释的是#
vim test.html
编辑文件(文件不存在则创建)i
进入编辑模式(i insert)ESC
+:wq
保存并退出ESC
+:q!
不保存并退出
Git使用
初始化用户
第一次使用时,需要配置我们的用户名和邮箱,用于表示开发者的信息
git config --global user.name "your name"
git config --global user.email "you email"
使用git config -l
来查看配置信息
文件初始化
git init 初始化仓库
git add xxx 将文件的修改(创建、删除、编辑等)添加到暂存区
git commit -m '注释' 提交到仓库
查看历史记录
git log
.git 目录
- hooks 目录包含客户端或服务端的钩子脚本,在特定操作下自动执行
- info 信息文件夹. 包含一个全局性排除文件,可以配置文件忽略
- logs 保存日志信息
- objects 目录存储所有数据内容,本地的版本库存放位置
- refs 目录存储指向数据的提交对象的指针(分支)
- config 文件包含项目特有的配置选项
- description 用来显示对仓库的描述信息
- HEAD 文件指示目前被检出的分支
- index 暂存区文件,是一个二进制文件 (git ls-files)
切记: 不要手动去修改 .git 文件夹中的内容
版本库的三个区域
- 工作区(代码编辑区)
- 暂存区(修改待提交区)
- 仓库区(代码保存区,也就是.git 里面的objects文件夹)
常用命令
- git status 版本状态查看
- git add -A 添加所有新文件到暂存区
- git commit -m '注释 ’ 提交修改并注释
git diff
查看工作区与暂存区的差异(不显示新增文件) 显示做了哪些修改git diff --cached
查看暂存区与仓库的差异git restore <filename>
删除对文件的修改。还原成未修改之前。git ls-files
查看暂存区的文件内容
git status 的颜色说明
git status
如果显示的是红色修改, 表明此修改只存在于『工作区』git status
如果显示的是绿色修改, 表明此修改只存在于『工作区』和『暂存区』
历史版本的回滚
查看历史记录
git log
git log --oneline // 这个是一个简短的查看方式,也显示不完整,hash值只显示前7位
如果内容偏多, 需要使用方向键上下滚动, 按
q
退出
根据版本号进行回滚
git reset --hard b815fd5a6ae655b521a31a9
进行版本回退时,不需要使用完整的哈希字符串,前七位即可
版本切换之前,要提交当前的代码状态到仓库,要不会影响切换后的版本的状态,因为工作区的文件都还在
找不到版本号的情况
查看所有的操作记录(因为切换过后,一些hash值就看不到了,head移动了,所以要用这个命名来查看所有的操作)
git reflog
配置忽略文件
忽略文件: 提交时不会提交该文件
项目中有些文件不应该存储到版本库中,Git 中需要创建一个文件 『.gitignore』 配置忽略,一般与 .git 目录同级。
常见情况有:
- 临时文件.
- 多媒体文件,如音频,视频(体积大)
- 编辑器生成的配置文件 (.idea,每个人的开发环境不同,比如一个人用vscode,而另外一个人用webstorm)
- npm 安装的第三方模块(体积大)
# 忽略所有的 .idea 文件夹
.idea
# 忽略所有以 .test 结尾的文件
*.test
# 忽略 node_modules 文件和文件夹
/node_modules
.gitignore 可以在子文件夹下创建
git init
touch .gitignore
vim .gitignore
# 里面书写忽略规则
# 忽略当前文件夹下的app.swp文件
/app.swp
# 忽略所有文件夹下的test.mp3文件
test.mp3
# 忽略指定后缀的文件
*.mp4
仓库中已经提交该文件该如何解决?
-
对于已经加入到版本库的文件,可以在版本库中删除该文件
git rm --cached .idea
-
然后在
.gitignore
中配置忽略.idea
-
add 和 commit 提交即可
分支(重要 )
分支特别重要,开发人员可以在主开发线(master)上分离出新的开发线(branch)
基础操作
创建分支
git branch name #name是分支的名字
分支就像树上的分叉一样,每棵树都有主干和分支,master
就是主干,branch
就是它的分支。
做某一个功能的时候,就可以开发一个分支,如果成功就可以将其合并到主分支。保证主分支的正确性。
查看分支
git branch
master
前面有星号,代表着,当前的开发线在这里
切换分支
git checkout name
合并分支
合并分支时,如果你想想把name分支合并到master,那么现在就必须处于master分支。被合并的分支是不会被删除的
git merge name
删除分支
git branch -d name
创建并切换分支
git checkout -b name
需要特别注意:切换分支的时候,一定要先提交当前的分支。如果不提交,那么你换过去,之前分支暂存区里面的内容还在,会搞得很混乱。
冲突
当多个分支修改同一个文件后,合并的时候就会产生冲突。这个时候只需要打开产生冲突的文件将【内容修改为最终想要的结果】,然后继续
git add
和git commit
就好。git stauts # 定位有冲突的文件 # 然后修改冲突的文件的内容 git add git commit
Git远程仓库
配置远程仓库
本地有仓库
一个本地仓库可以绑定对个远程仓库,设置多个别名即可。推送的时候可以向不同的远程仓库推送不同的分支。(只需要输入不同的别名)
# 在远程新建并且不需要初始化
git remote add origin 'src'
# origin 远程仓库的别名
#'scr' 仓库的地址
git push -u 别名 分支名 # 将本地仓库的分支推送到远端, -u 就是表示关联,第一次使用后,后续的提交只需要使用git push(使用使用上次的别名和分支名)
本地没有仓库
git clone src [filename 可以修改克隆下来的文件夹名称] # 代码克隆成功后,会自动生成一个别名 origin
多人协作
一定要先
git pull
- 创建新的组织。
-
邀请成员
-
权限分配
-
在组织中创建仓库,需要特别注意的是,创建仓库是,owner应该选择组织名,而不是自己的名字。
-
git pull origin master
拉取更新。 -
千万不能出现仓库套仓库的情况。
git clone 和 git pull的区别
git clone
会克隆整个仓库
git pull
只会拉去当前分支
一些远程仓库
Github
Gitee
- 内部搭建的 Git服务(
Gitlab
)
Gitflow
GitFlow详解教程_BlueKitty的博客-CSDN博客_gitflow