git相关概念 | 说明 |
---|---|
git | 是一种版本控制系统,是一个命令,是一种工具 |
gitlib | 是用于实现 git 功能的开发库 |
github | 是一个基于 git 实现的在线代码托管仓库,包含一个网站界面,向互联网开放 |
gitlab | 是一个基于 git 实现的在线代码仓库托管软件,一般用于在企业内部网络搭建 git 私服 |
注: gitlab-ce 社区版 ; gitlab-ee 是企业版,收费
一、git基础
1、git安装
# yum -y install git
# git config --global user.name "zhangsan" //声明自己的名字
# git config --global user.email "zhangsan@163.com" //声明自己的邮箱
# mkdir /data //创建版本库目录
# cd /data
# git init //初始化当前目录为版本库
初始化空的 Git 版本库于 /data/.git/
# ls .git/
branches config description HEAD hooks info objects refs
文件夹 | 说明 | 文件夹 | 说明 |
---|---|---|---|
branches | 分支目录 | config | 定义目录特有的配置选项 |
description | 仅供git web使用 | HEAD | 指定当前的分支 |
hooks | git钩子文件 | info | 包含一个全局排除文件(exclude) |
objects | 存放所有的数据内容 | refs | 指针文件 |
index | 暂存区文件 |
2、上传代码步骤
# vim readme.txt //创建文件,模拟代码
123456789
# git add readme.txt //单个文件上传
# git status //查看暂存区
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
# (使用 "git rm --cached <file>..." 撤出暂存区)
#
# 新文件: readme.txt
#
# git rm --cached readme.txt //把文件从暂存区撤销
rm 'readme.txt'
# git add . //当前目录所有文件上传
# git commit -m "add readme.txt file" //上传到版本库
[master(根提交) 0f7f688] add readme.txt file
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
# vim readme.txt //修改readme.txt内容
123456789
111111111
# git add . //当前目录所有文件上传
# git diff readme.txt //查看异同
# git commit -m "add readme.txt file" //上传到版本库
[master 0282ca1] add readme.txt file
1 file changed, 1 insertion(+)
# git status //查看版本状态
# git log //显示历史记录详细信息
commit 0282ca17c98007d872f7c57f22d9ca1ffc60b8bb
Author: zhangsan <zhangsan@163.com>
Date: Mon Jul 20 17:00:28 2020 +0800
add readme.txt file
commit 0f7f6884ce95c8b577ac40bfd399cb5efdc95d62
Author: zhangsan <zhangsan@163.com>
Date: Mon Jul 20 16:59:14 2020 +0800
add readme.txt file
# git log --oneline //显示历史记录摘要信息
0282ca1 add readme.txt file
0f7f688 add readme.txt file
# git reset --hard HEAD^ //回滚到上个版本,HEAD^^上上版本,HEAD~10回滚到上10个版本
HEAD 现在位于 0f7f688 add readme.txt file
# git reset --hard 0f7f688 //通告git log 的版本号码回滚,仅写前7位就可
HEAD 现在位于 0f7f688 add readme.txt file
# git reflog //回滚动作命令日志
0f7f688 HEAD@{0}: reset: moving to HEAD^
0282ca1 HEAD@{1}: commit: add readme.txt file
0f7f688 HEAD@{2}: commit (initial): add readme.txt file
二、git常用命令
1、初始化仓库
git config --global user.name "zhangsan" # 声明自己的名字
git config --global user.email "zhangsan@163.com" # 声明自己的邮箱
git init # 初始化当前目录为版本库
2、获取或配置仓库信息
git config --list # 获取config信息
git config --global user.name "your name" # 设置username
git config --global user.email "your_email@youremail.com" # 设置邮箱
3、重定向仓库地址(仓库迁移)
git remote set-url origin <新的仓库名> # 更换仓库远程地址
git push -u -f origin
git push -u -f origin --all # 把所有分支迁移过去
git push -u -f origin --tags # 把所有tag迁移过去
4、更改代码后提交代码
git add readme.txt # 单个文件上传
git add . # 当前目录所有更改文件上传
git status # 查看暂存区
git rm --cached readme.txt # 把文件从暂存区撤销
git checkout -- readme.txt # 已经提交到暂存区,之后再修改内容出错,想回到上次暂存区版本
git commit -m "add readme.txt file" # 上传到版本库
git push # 提交代码
5、分支操作
git branch # 查看分支
git branch ops # 创建分支
git checkout ops # 切换分支
git checkout -b dev # 创建并切换到新的分支
git checkout master # 切换到主分支
git merge dev # dev合并到master分支
git branch -d dev # 删除分支
git branch -d 分支名 # 删除分支
git branch -D 分支名 # 强制删除 若没有其他分支合并就删除 d会提示 D不会
git branch -m 旧分支名 新分支名 # 修改分支名
git branch -M 旧分支名 新分支名 # 修改分支名 M强制修改 若与其他分支有冲突也会创建(慎用)
git branch -r # 列出远程分支
git branch -a # 列出远程分支以及本地分支名,远程分支会以remote/origin/分支名这种形式展示红色标识
git branch # 查看本地分支
6、将某次commit从一个分支转移到另一个分支
git checkout dev # 切换到已提交代码分支
git log # 查看提交历史
git checkout B # 切换到需要提交代码的分支
git cherry-pick commit id # 将该commit id pick到需要到分支
7、将本地分支的多次提交合并为一个commit到远程仓库
git log # 查看提交历史
git rebase -i HEAD~2 # 合并本地的commit节点,2为需要合并的节点数量
git push origin master # 本地版本库提交至远程仓库,如果提示远程仓库与本地工作树不一致可添加--force参数强制覆盖
8、Gitlab在fork之后如何和主仓库同步
git remote -v # 查看远程仓库路径
git remote add upstream 源项目地址 # 增加上游代码库(只有origin没有upstream时操作)
git add . # 当前目录所有更改文件上传
git commit -m "提交命名" # 提交所有更改放到缓存区
git pull --rebase upstream # 拉取原仓库的修改文件
9、标签操作
git tag # 查看列出所有打过的标签名
git tag -d 标签名 # 删除对应标签 只是删除了本地的
git tag 标签名字 # 在当前仓库打个标签
git show 标签名称 # 查看tag的详细信息 包括commitid 作者信息 日期 内容
git push origin 标签名称 # 同步这个tag到远程服务器 默认tag是打在本地的 这个命令可以把它推到远程
git push origin --tags # 将本地所有tag推送到远程服务器
git pull --tags # 把远程仓库的标签也拉取下来
10、版本回滚
注意:版本回滚前,尽量备份一下当前文件
git reset --hard HEAD^ # 回滚到上个版本,HEAD^^上上版本,HEAD~10回滚到上10个版本
git reset --hard <commit id> # 通告git log 的版本号码回滚,仅写前7位就可
git reflog # 回滚动作命令日志
11、Git代理设置
# 设置使用HTTP类型的代理
git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
# 取消代理的设置
git config --global --unset http.proxy
git config --global --unset https.proxy
# 设置使用socks5类型的代理
git config --global http.proxy 'socks5://127.0.0.1:1081'
git config --global https.proxy 'socks5://127.0.0.1:1081'
# 查看代理设置
git config --global --get http.proxy
git config --global --get https.proxy
三、.gitignore文件
1、简介
一般来说每个Git项目中都需要一个“.gitignore”文件,这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。
2、用法
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
注意
- 这样没有扩展名的文件在Windows下不太好创建,方法:创建一个文件,文件名为:“.gitignore.”,注意前后都有一个点。保存之后系统会自动重命名为“.gitignore”。
- 假设我们只有过滤规则没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!
- 如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。简单来说,出现这种问题的原因就是Git已经开始管理这些文件了,所以你无法再通过过滤规则过滤它们。所以一定要养成在项目开始就创建.gitignore文件的习惯,否则一旦push,处理起来会非常麻烦
评论区