• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共17篇

    开发准备!

关闭

返回开发准备!栏目

3 - git - git使用

作者:

贺及楼

成为作者

更新日期:2024-06-03 11:34:46

git是全球受欢迎的代码管理工具,可以清晰展现修改过的代码、任何时候提交的分支
git的功能全面,为每一个项目加上git功能,享受多人修改代码带来的项目快速更新

gui 图形界面

guihub的GUI
https://desktop.github.com/
其他的GUI
https://www.sourcetreeapp.com/

作用

图例

  1. 理想的开发路线功能BCD
  2. 但是实际不是
  3. 所以要按功能出分支
  4. 在上线前有两种方法出分支(在master或者功能F的基础上)
  5. “测试功能FG”可以变成“1.2版本”
  6. 功能H就是写好了却没上线
  7. 就留下来了
  8. “修复bug”也是从“测试功能FG”分支分出来
  9. 测试分支不写任何代码,要随时可以删除的,不然的话临时说不变更那就炸了
  10. 分支分得好,冲突就少
  11. 写代码之前就要想好分支在哪里出,不要一下子就写代码,不要一下子就写代码,不要一下子就写代码
  12. 写代码之前就要想好分支在哪里出,这样就不用回退了!这样就不用回退了!这样就不用回退了!
  13. 提交就一个小功能、一个小功能地提交(commit),每个提交(commit)随时可以新建分支,合并
  14. 测试分支的时候,只需要检查圆头头功能有没有合并,不该合并的就不管,就好了
  15. 个人感觉,可以把git当作是需求管理工具
  16. 有什么需求就新建一个分支,分支会出现在底下,没有提交就说明没有写代码,哈哈可以提醒一下自己
  17. 提交的话语个人感觉加上(未完成)、(已完成)这样子可以通过“当前分支”、“按层级顺序”可以看到是否完成
  18. 毕竟经常会有新需求袭来
  1. git提交前加上.gitignore

理解

Created with Raphaël 2.1.2Remote:远程仓库Remote:远程仓库Repository:仓库区(或本地仓库)Repository:仓库区(或本地仓库)index / Stage:暂存区index / Stage:暂存区Workspace:工作区Workspace:工作区git fetch/clonegit pushgit commitgit addgit checkoutgit pull

Repository:仓库区(或本地仓库)
index / Stage:暂存区(实际上只是一个文件)
Workspace:工作区(文件夹现在看到的)

安装集合

https://gitee.com/all-about-git

安装 - mac

安装Xcode附带

配置

echo $SHELL
确认终端类型
以前每个新用户的默认shell是/bin/bash,那么这里我们需要配置文件为~/.bash_profile,
从macOS Catalina(10.15.x) 版开始,Mac使用/bin/zsh作为默认Shell,其对应的配置文件为~/.zshrc

配置中文命令

  1. git status中文显示乱码解决:
  2. git config --global core.quotepath false
  3. git log中文乱码解决:
  4. git config --global gui.encoding utf-8
  5. git config --global i18n.commitencoding utf-8
  6. git config --global i18n.logoutputencoding utf-8
  7. 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即从库中取出文件, 覆盖当前修改。
  1. A: 工作区新增的文件.
  2. C: 文件的一个新拷贝.
  3. D: 你本地删除的文件,服务器上还在。
  4. R: 文件名被修改了。
  5. T: 文件的类型被修改了。
  6. U: 文件没有被合并,需要完成合并才能进行提交。
  7. X: 未知状态。

.gitignore git不提交的目录

  1. * 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
  2. * 开头的文件标识注释,可以使用反斜杠进行转义
  3. * ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
  4. * / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
  5. * / 开始的模式匹配项目跟目录
  6. * 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
  7. * ** 匹配多级目录,可在开始,中间,结束
  8. * ? 通用匹配单个字符
  9. * * 通用匹配零个或多个字符
  10. * [] 通用匹配单个字符列表
  1. bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
  2. /bin: 忽略根目录下的bin文件
  3. /*.c: 忽略 cat.c,不忽略 build/cat.c
  4. debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
  5. **/foo: 忽略/foo, a/foo, a/b/foo
  6. a/**/b: 忽略a/b, a/x/b, a/x/y/b
  7. !/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
  8. *.log: 忽略所有 .log 文件
  9. config.php: 忽略当前路径的 config.php 文件

如果在远程仓库已经存在一堆不用的文件

例如python 里.pyc 文件
直接更改.gitignore是不行的,因为远程仓库有
应该这样操作:

  1. (在dev分支)根目录下运行:批量移除本地的.pyc、新增.gitignore文件内容、commit提交
  2. git rm ./\*.pyc
  3. (在dev分支)根目录下运行:版本库中删除但在本地保留
  4. git rm --cached ./\*.pyc
  5. 切换到master主分支:
  6. git checkout master
  7. 合并dev分支到master主分支
  8. git merge dev
  9. 提交master到远程仓库
  10. git push -u origin master

.git里面有什么

HEARD:ref:refs/heads/master

git fetch 四种基本用法

  1. 1. git fetch
  2. 这将更新git remote 中所有的远程仓库(repository) 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中
  3. 2. git fetch remote_repository
  4. 这将更新名称为remote_repository 的远程repository上的所有branch的最新commit-id,将其记录。
  5. 3. git fetch remote_repository remote_branch_name
  6. 这将更新名称为remote_repository 的远程repository上的分支: remote_branch_name
  7. 4. git fetch remote_repository remote_branch_name:local_branch_name
  8. 这将更新名称为remote_repository 的远程repository上的分支: remote_branch_name ,并在本地创建local_branch_name 本地分支保存远端分支的所有数据。
  9. FETCH_HEAD 是一个版本链接,记录在本地的一个文件中,指向目前已经从远程仓库取下来的分支的末端版本。

git tag 标签

  1. 1.什么是tag
  2. 1.1 tag的简单理解
  3. tag 中文我们可以称它为 标签。
  4. 简单的理解,tag 就是 对某次 commit 的一个标识,相当于起了一个别名。
  5. 例如,在项目发布某个版本的时候,针对最后一次commit 起一个 v1.0.100 这样的标签来标识里程碑的意义。
  6. 1.2 tag的类型
  7. 有两种类型的标签 轻量标签(lightweight)、附注标签(annotated)
  8. 【轻量标签 】: 只是某个commit 的引用,可以理解为是一个commit的别名;
  9. 【附注标签】 :是存储在git仓库中的一个完整对象,包含打标签者的名字、电子邮件地址、日期时间 以及其他的标签信息。
  10. 它是可以被校验的,可以使用 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 分支名称 标签名称

stash 缓存

命令 释义
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

使用git思路

  1. 假设上线版本是main
  2. 但是大部分可能是提前开发很多功能
  3. 所以是在dev2-5这里开一个新分支(功能1)开发
  4. dev2-5可能出了4个分支
  5. 等到测试的时候新建一个的“dev2-6测试”分支
  6. 把“功能1”、“功能3”合并到“test2-6”,“功能1”、“功能3”不需要删除,不在“test2-6修改”,在“功能1”、“功能3”修改
  7. test2-6”行就上“test2-6”,改为“2-6”,不行就算了,随时可以删除
  8. 冲突一般是因为文件分不好才会导致冲突,一个文件100行代码就好了,冲突都少很多
  9. 可以做到每天都commit代码,因为不commit代码是不可以切换分支的
  10. 分支就可以随便切换了
来自 中文 英文 例子 性质
主分支 master
开发主分支 develop dev2-7
开发主分支 功能分支 feature feature-*** 临时
开发主分支 预发布分支 release release-*** 临时、合并功能分支
主分支 修补bug分支 hotfix hotfix-*** 临时