hand
_1_28_13
4
返回栏目
0.5k
0k
9k
0.3k
0.2k
1k
0.2k
0k
0k
0k
0k
0k
0k
0k
0k
0k
0k
返回开发准备!栏目
作者:
贺及楼
成为作者
更新日期:2024-06-03 11:34:46
git是全球受欢迎的代码管理工具,可以清晰展现修改过的代码、任何时候提交的分支
git的功能全面,为每一个项目加上git功能,享受多人修改代码带来的项目快速更新
guihub的GUI
https://desktop.github.com/
其他的GUI
https://www.sourcetreeapp.com/
理想的开发路线功能BCD
但是实际不是
所以要按功能出分支
在上线前有两种方法出分支(在master或者功能F的基础上)
“测试功能F、G”可以变成“1.2版本”
功能H就是写好了却没上线
就留下来了
“修复bug”也是从“测试功能F、G”分支分出来
测试分支不写任何代码,要随时可以删除的,不然的话临时说不变更那就炸了
分支分得好,冲突就少
写代码之前就要想好分支在哪里出,不要一下子就写代码,不要一下子就写代码,不要一下子就写代码
写代码之前就要想好分支在哪里出,这样就不用回退了!这样就不用回退了!这样就不用回退了!
提交就一个小功能、一个小功能地提交(commit),每个提交(commit)随时可以新建分支,合并
测试分支的时候,只需要检查圆头头功能有没有合并,不该合并的就不管,就好了
个人感觉,可以把git当作是需求管理工具
有什么需求就新建一个分支,分支会出现在底下,没有提交就说明没有写代码,哈哈可以提醒一下自己
提交的话语个人感觉加上(未完成)、(已完成)这样子可以通过“当前分支”、“按层级顺序”可以看到是否完成
毕竟经常会有新需求袭来
git提交前加上.gitignore
Repository:仓库区(或本地仓库)
index / Stage:暂存区(实际上只是一个文件)
Workspace:工作区(文件夹现在看到的)
https://gitee.com/all-about-git
安装Xcode附带
echo $SHELL
确认终端类型
以前每个新用户的默认shell是/bin/bash,那么这里我们需要配置文件为~/.bash_profile,
从macOS Catalina(10.15.x) 版开始,Mac使用/bin/zsh作为默认Shell,其对应的配置文件为~/.zshrc
git status中文显示乱码解决:
git config --global core.quotepath false
git log中文乱码解决:
git config --global gui.encoding utf-8
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
git config --global svn.pathnameencoding utf-8
分类 | 中文 | 命令 | |
---|---|---|---|
看版本 | git --version |
||
config | 更多参数 | git config |
|
全部配置信息 | git config --list |
||
全部配置信息 | git config -l |
||
系统配置信息(git安装目录gitconfig) | git config --system -list |
||
本地配置信息(用户密码必须,在用户目录.gitconfig) | git config --global -list |
||
全局配置cat名 | git config --global user.name "cat" |
||
全局配置邮箱 | git config --global user.email "3xxxxx@qq.com" |
||
设置 | 设置远程仓库地址 | git remote add origin http://123.123.0.123:3000/xxx/xxx.git |
|
复制/克隆项目 | 从远程克隆项目->本地 | git clone 【url】 |
|
复制/克隆项目 | 从远程克隆项目->本地 | git clone http://192.0.0.0:3000/xx/xx.git |
|
log | 更多参数 | git log |
退出q |
log | 每次commit发生变更的文件 | git log --stat |
|
status | 提示有没有未提交到版本库 | git status |
|
新建 | 新建一个本地仓库 | git init |
|
新建 | 增加一个新的远程仓库,并命名 | git remote add [shortname] [url] |
|
查看 | 本地有多少分支 | git branch |
|
查看 | 远程有多少分支 | git branch -r |
|
查看 | 远程、本地有多少分支 | git branch -a |
|
查看差异 | 显示暂存区和工作区的差异 | git diff |
|
查看差异 | 显示出branch1和branch2中差异的部分 | git diff branch1 branch2 --stat |
|
查看差异 | 显示指定文件的详细差异 | git diff branch1 branch2 -- 具体文件路径 |
|
查看差异 | 显示出所有有差异的文件的详细差异 | git diff branch1 branch2 |
|
查看差异 | 查看branch1分支有,而branch2中没有的log | git log branch1 ^branch2 |
|
查看差异 | 查看branch2中比branch1中多提交了哪些内容 | git log branch1…branch2 |
|
查看差异 | 不知道谁提交的多谁提交的少,单纯想知道有什么不一样 | git log branch1…branch2 |
|
查看差异 | 在上述情况下,在显示出每个提交是在哪个分支上 | git log -left-right branch1…branch2 |
|
查看差异 | 根据我们在 –left-right branch1…branch2 的顺序 | 左箭头 < 表示是 branch1 的,右箭头 > 表示是branch2的 | |
查看差异 | 前面的两个数字分别代表增加和删除的行 | git diff --numstat |
|
查看差异 | “—“表示变动前的版本 | “+++”表示变动后的版本 | |
查看 | 下载远程仓库的所有变动(刷新) | git fetch |
|
查看 | 下载远程仓库的所有变动(刷新) | git fetch |
|
查看 | 下载远程仓库的所有变动(刷新) | git fetch |
|
查看 | 下载远程仓库的所有变动(刷新) | git fetch |
|
查看 | 显示所有远程仓库,查看远程地址 | git remote -v |
|
查看 | 显示某个远程仓库的信息 | git remote show [remote] |
|
新建分支 | 新建dev分支,但依然停留在当前分支 | git branch dev |
|
新建分支 | 新建dev分支,并切换到该分支 | git branch -b dev |
|
新建分支 | 新建dev分支,与指定的远程分支建立追踪关系 | git branch --track dev [remote-branch] |
|
切换分支 | 切换dev分支 | git checkout dev |
|
切换分支 | 新建并切换dev分支 | git checkout -b dev |
|
合并分支 | 合并指定分支到当前分支 | git merge xxx |
|
合并分支 | 取回远程仓库的变化,并与本地分支合并 | git pull [remote] [branch] |
|
删除分支 | 删除dev分支 | git branch -d dev |
|
删除分支 | 删除远程dev分支 | git push origin --delete dev |
|
提交 | 工作区提交到暂存区 | git add readme.txt |
|
提交 | 工作区提交到暂存区全部文件 | git add . |
|
提交 | 暂存区提交到版本区全部文件-m是信息 | git commit -m "这是一次提交" |
|
提交 | 本地git提交到远程仓库 | git push -u 远程标识 分支名 |
|
提交 | 本地git提交到远程仓库 | git push -u origin master |
|
提交 | 上传本地指定分支到远程仓库 | git push [remote] [branch] |
|
提交 | 强行推送当前分支到远程仓库,即使有冲突 | git push [remote] --force |
|
提交 | 推送所有分支到远程仓库 | git push [remote] --all |
|
回退 | 恢复某个commit的指定文件到工作区 | git checkout [commit] [file] |
|
回退 | 恢复上一个commit的所有文件到工作区 | git checkout . |
|
回退 | 恢复暂存区的指定文件到工作区 | git checkout [file] |
|
回退 | 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 | git reset [file] |
|
回退 | 重置暂存区与工作区,与上一次commit保持一致 | git reset --hard |
|
回退 | 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 | git reset [commit] |
|
回退 | 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致 | git reset --hard [commit] |
|
回退 | 重置当前HEAD为指定commit,但保持暂存区和工作区不变 | git reset --keep [commit] |
|
新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支 | git revert [commit] |
http://cd.itheima.com/news/20211214/144207.html
代号 | 状态 | 状态 | 说明 |
---|---|---|---|
U | Untracked | 未跟踪 | 此文件在文件夹中,但没有加入到git库,不参与版本控制。 通过git add 状态变为Staged。 |
Staged | 暂存状态 | 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified | |
Unmodify | 文件已入库,未修改 | 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件。 | |
M | Modified | 文件已修改 | , 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改。 |
A: 工作区新增的文件.
C: 文件的一个新拷贝.
D: 你本地删除的文件,服务器上还在。
R: 文件名被修改了。
T: 文件的类型被修改了。
U: 文件没有被合并,需要完成合并才能进行提交。
X: 未知状态。
* 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
* 开头的文件标识注释,可以使用反斜杠进行转义
* ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
* / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
* / 开始的模式匹配项目跟目录
* 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
* ** 匹配多级目录,可在开始,中间,结束
* ? 通用匹配单个字符
* * 通用匹配零个或多个字符
* [] 通用匹配单个字符列表
bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 忽略根目录下的bin文件
/*.c: 忽略 cat.c,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略当前路径的 config.php 文件
例如python 里.pyc 文件
直接更改.gitignore是不行的,因为远程仓库有
应该这样操作:
(在dev分支)根目录下运行:批量移除本地的.pyc、新增.gitignore文件内容、commit提交
git rm ./\*.pyc
(在dev分支)根目录下运行:版本库中删除但在本地保留
git rm --cached ./\*.pyc
切换到master主分支:
git checkout master
合并dev分支到master主分支
git merge dev
提交master到远程仓库
git push -u origin master
HEARD:ref:refs/heads/master
1. git fetch
这将更新git remote 中所有的远程仓库(repository) 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中
2. git fetch remote_repository
这将更新名称为remote_repository 的远程repository上的所有branch的最新commit-id,将其记录。
3. git fetch remote_repository remote_branch_name
这将更新名称为remote_repository 的远程repository上的分支: remote_branch_name
4. git fetch remote_repository remote_branch_name:local_branch_name
这将更新名称为remote_repository 的远程repository上的分支: remote_branch_name ,并在本地创建local_branch_name 本地分支保存远端分支的所有数据。
FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向目前已经从远程仓库取下来的分支的末端版本。
1.什么是tag
1.1 tag的简单理解
tag 中文我们可以称它为 标签。
简单的理解,tag 就是 对某次 commit 的一个标识,相当于起了一个别名。
例如,在项目发布某个版本的时候,针对最后一次commit 起一个 v1.0.100 这样的标签来标识里程碑的意义。
1.2 tag的类型
有两种类型的标签 : 轻量标签(lightweight)、附注标签(annotated)
【轻量标签 】: 只是某个commit 的引用,可以理解为是一个commit的别名;
【附注标签】 :是存储在git仓库中的一个完整对象,包含打标签者的名字、电子邮件地址、日期时间 以及其他的标签信息。
它是可以被校验的,可以使用 GNU Privacy Guard (GPG) 签名并验证。
分类 | 中文 | 命令 | |
---|---|---|---|
查看 | 列出所有的标签 | git tag |
|
查看 | 列出筛选的标签 | git tag -l [标签名称筛选字符串*] |
|
查看 | 列出筛选的标签 | git tag --list [标签名称筛选字符串*] |
|
查看 | 列出标签的信息 | git show 标签名 |
|
查看 | 列出标签的信息 | git show v4.1 |
轻量标签 |
查看 | 列出标签的信息 | git show v4.1-release |
附注标签 |
创建 | 给当前的提交版本创建一个【轻量标签】 | git tag 标签名 |
|
创建 | 给指定的提交版本创建一个 【轻量标签】 | git tag 标签名 提交版本号 |
|
创建 | 给指定的提交版本创建一个 【轻量标签】 | git tag v4.2 d7a7f8aa |
|
创建 | 给指定的提交版本创建一个【附注标签】 | git tag -a 标签名称 提交版本号 -m 附注信息 |
|
创建 | 给指定的提交版本创建一个【附注标签】 | git tag -a v4.2 d7a7f8aa -m 'xx更新' |
|
删除 | 删除指定名称的标签 | git tag -d 标签名称 |
|
删除 | 删除指定名称的标签 | git tag -d d7a7f8aa |
|
推送 | 将指定的标签上传到远程仓库 | git push origin 标签名称 |
|
推送 | 将所有不在远程仓库中的标签上传到远程仓库 | git push origin --tags |
|
删除远程 | 删除远程仓库中的 指定标签 | git push origin :regs/tags/标签名称 |
|
删除远程 | 删除远程仓库中的 指定标签 | git push origin --delete 标签名称 |
|
检出标签 | git checkout -b 分支名称 标签名称 |
命令 | 释义 |
---|---|
git stash |
隐藏当前的工作现场, 此时, git status的结果是 clean |
git stash -u |
隐藏当前的工作现场,-u包含未跟踪的, 此时, git status的结果是 clean |
git stash save "commend" |
隐藏当前的工作现场,添加描述, 此时, git status的结果是 clean |
git stash list |
查看所有隐藏, 每一行的冒号前面的字符串就是标识此隐藏的id |
git stash apply |
重新显示标识为 id 的隐藏 |
git stash drop |
git apply恢复隐藏后, 需要手动删除 list 列表中的记录 |
git stash pop |
恢复最新的进度到工作区,并删除stash |
git stash pop stash@[stash_id] |
恢复指定的进度到工作区 |
https://blog.csdn.net/jxwBlog/article/details/124449207?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-124449207-blog-96425712.235%5Ev38%5Epc_relevant_anti_t3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-124449207-blog-96425712.235%5Ev38%5Epc_relevant_anti_t3&utm_relevant_index=5
https://blog.csdn.net/csdnlijingran/article/details/96425712
假设上线版本是main
但是大部分可能是提前开发很多功能
所以是在dev2-5这里开一个新分支(功能1)开发
dev2-5可能出了4个分支
等到测试的时候新建一个的“dev2-6测试”分支
把“功能1”、“功能3”合并到“test2-6”,“功能1”、“功能3”不需要删除,不在“test2-6修改”,在“功能1”、“功能3”修改
“test2-6”行就上“test2-6”,改为“2-6”,不行就算了,随时可以删除
冲突一般是因为文件分不好才会导致冲突,一个文件100行代码就好了,冲突都少很多
可以做到每天都commit代码,因为不commit代码是不可以切换分支的
分支就可以随便切换了
来自 | 中文 | 英文 | 例子 | 性质 |
---|---|---|---|---|
主分支 | master | |||
开发主分支 | develop | dev2-7 |
||
开发主分支 | 功能分支 | feature | feature-*** |
临时 |
开发主分支 | 预发布分支 | release | release-*** |
临时、合并功能分支 |
主分支 | 修补bug分支 | hotfix | hotfix-*** |
临时 |
开发准备!
整章节共17节
快分享给你的小伙伴吧 ~