简介
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
配置文件
在git上配置文件config分为三种级别,分别为系统级别,用户级别,项目级别
配置检查
系统级别,system ,命令# git config -system -l
用户级别,global ,命令# git config -global -l
项目级别,local ,命令# git config -local -l
配置用户
#全局配置
git config --global user.name "Your Names"
git config --global user.email "Your Email"
git config --list
#局部配置
$ git config user.name "gitlab’s Name"
$ git config user.email "gitlab@xx.com"
$ git config --list
常用指令
//克隆远程仓库指定分支代码(默认分支master)
git clone -b 分支名称 git远程仓库地址
//创建跟踪
git branch --set-upstream-to=origin/<远程分支> 本地分支
//创建远程分支然后拉取到本地
git checkout -b feature-branch origin/feature-branch
//本地先开好分支然后推送到远程
git checkout -b 分支名
git push origin 本地分支名:远程分支名
//查看修改文件
git status
//添加到等待提交列表中(add 后面接要提交的文件名)
git add .
//添加提交描述信息
git commit -m 'feat: #67364 提交信息'
//添加到远程分支
git push --set-upstream origin 远程分支名
//拉取远程分支到本地
git fetch origin 远程分支名
git pull origin --rebase 远程分支名(rebase合并操作)
//比较连个版本
git diff
//切换分支
git checkout 分支名
//删除暂存区内不想要的文件
git rm --cached <file>
//强制提交(合并)
git push origin 分支名 --force
//回退
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commit_id 退到/进到 指定commit的sha码
//暂存本地修改
git stash
//暂存缓存回退到本地(有修改回退本地会有冲突)
git stash pop|apply
//查看多个暂存
git stash list
//还原指定版本暂存
git stash pop stash@{?}
//清除某个版本暂存
git stash drop stash@{?}
//查看各版本时间轴方式
git log --oneline --decorate --graph --all
Commit message格式
<type>: <subject>
//注意冒号后面有空格。
type
用于说明 commit 的类别,只允许使用下面7个标识。
feat:新功能(feature)
fix:修补bug
docs:文档(documentation)/注释
perf: 优化/性能提升
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
revert:撤销修改
types:类型定义文件更改
chore:构建过程或辅助工具的变动
如果type为feat和fix,则该 commit 将肯定出现在 Change log 之中。
subject
subject是 commit 目的的简短描述,不超过50个字符,且结尾不加句号(.)。
补充
在shll控制台中修改文件拥有者,和属组
- 修改拥有者 chown -R 拥有者名 目录名
- 修改属组 chgrp 组名 文件名
将远程git仓库里的指定分支拉取到本地(本地不存在的分支)
当我想从远程仓库里拉取一条本地不存在的分支时:
git checkout -b 本地分支名 origin/远程分支名
这个将会自动创建一个新的本地分支,并与指定的远程分支关联起来。
例如远程仓库里有个分支dev2,我本地没有该分支,我要把dev2拉到我本地:
若成功,将会在本地创建新分支dev2,并自动切到dev2上。
如果出现提示:
fatal: Cannot update paths and switch to branch 'dev2' at the same time.
Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
表示拉取不成功。我们需要先执行
git fetch
然后再执行
git checkout -b 本地分支名 origin/远程分支名
即可。
.gitignore添加文件失效
问题描述:git上传的时候,我们已经将 xxx 文件添加到了.gitignore 中,但是在push 后,远程仓库还是会显示此文件。
解决方式:
git rm -r --cached 文件/文件夹名字(. 代表所有文件)
# 去掉已经托管的文件,然后重新提交
git add .
git commit -m 'update .gitignore'
git push
原因:不要误解了.gitignore的用途,该文件只能作用于未被跟踪的文件,也就是那些从来没有被git记录过的文件(自添加以后,从未add及commit过的文件)。如果文件曾经被git记录过,那么.gitignore就对他们完全无效。
【补充】
在项目中推荐按着git的规则
在需要屏蔽提交文件/文件夹 的目录中单独写入.gitignore
.gitignore文件忽略规则
ID | 语法 | 解释 |
---|---|---|
1 | #注释 | 以#开头的行为注释行,不起作用 |
2 | *.a | 忽略所有.a结尾文件 |
3 | !.b | 排除对于.b文件的忽略 |
4 | build/ | 忽略build/目录下所有文件 |
5 | img/*.png | 忽略img/1.png,但是不忽略img/2023/2.png |
无本地仓库项目与远程仓库同步
实用场景:测试项目搭建,复制项目删除掉.git目录重新跟踪等
#1. 创建本地仓库
git init
#2. 建立项目跟踪
git remote add origin git@gitee.com:phpfunny/game-website.git
#3. 修改当前分支
git checkout -b 本地分支
#4. 还原指定远程分支最新代码
git reset --hard origin/远程分支
#5. 尝试git pull 或者 git push 提示要本地远程分支建立联系
git push --set-upstream origin 远程分支
#或者
git push --set-upstream origin 远程分支
#6. 最后测试
git pull
#或者
git push
Clone所有分支及其代码和记录
实用场景:
- 迁移仓库
- 本地拥有所有远程分支版本代码
#创建文件夹
mkdir md
cd md
#使用bare方式clone代码,并把下载后的文件夹重命名为 .git
git clone --bare [远程仓库地址] .git
#使用该命令(不用担心core.bare是否存在)或git config --bool core.bare false
git config --unset core.bare
#同步代码与远程代码保持最新
git reset --hard
#查看本地分支
git branch
迁移新仓库
实用场景:将旧的远程仓库数据 迁移 到新的远程仓库
#拉取项目
git clone [旧远程仓库地址]
#使用bare方式clone代码,并把下载后的文件夹重命名为 .git
git clone --bare [旧远程仓库地址] .git
#移除老项目关联仓库
git remote remove origin
#关联新仓库地址
git remote add origin [新远程仓库地址]
#只推送单个分支 - 推送到新仓库,如果是空项目执行下面那句
git push
git push --set-upstream origin master
#推送所有分支 - 推送到新仓库
git push --mirro [新远程仓库地址]
git clone https 记住密码
#永久记住
git config --global credential.helper store
git stash pop stash@{?}报错 error: unknown switch
e'`
原因:在windows环境下PowerShell和cmd和Git Bash 编辑器中 认定花括号是代码块执行标识符。执行带有花括号序号转义
解决方式:
git stash pop stash@`{?`}
评论