GIT指令之项目控制

是滑稽啊
2020-09-30 / 0 评论 / 196 阅读 / 正在检测是否收录...

简介

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文件的忽略
4build/忽略build/目录下所有文件
5img/*.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所有分支及其代码和记录

实用场景:

  1. 迁移仓库
  2. 本地拥有所有远程分支版本代码
#创建文件夹
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@`{?`}
0

评论

博主关闭了所有页面的评论