git总结1-本地命令

1. 版本控制工具分类

1. 集中式版本控制工具 svn、cvs、 vss (所有代码在一个服务器上容易出现单点故障问题,版本控制必须通过服务器)

2. 分布式版本控制工具 git (代码在每个用户那里,用户自己本地就可以进行版本控制)

2. git和svn的实现原理对比

1. 版本控制

git是快照存储(在.git/objects/文件下)每个文件的改动会生成快照且生成hash戳,当前版本文件没有改动文件指向上一个版本文件的hash戳,每次commit也会生成hash和快照,而所有文件的hash会放到这个下面作为一个tree的属性存在;上一个commit版本hash叫parent属性,构成一个链表结构;git核心就是对这些hash进行管理,

svn每个版本是只存储和上个版本不一致的地方,然后把所有的历史版本串起来,就是当前版本

2. 库存储

git所有的版本都是在本地存储的, 存储位置在.git/object/xxx,本地可以切换分支,再和线上版本比较进行拉取。

svn是在线上的一台服务器上的,每次切换版本都需要从线上拉取,本地不存储各个版本。

3. 分支操作

git分支,在创建时创建了一个指针指向了当前版本的commit对象(此时分支复制以前的commit对象链表),切换分支后提交也只是提交了一个新的commit对象(再分支自己的链表上新增了一个commit对象)。 merge合并的话也只是基于commit对象的tree属性的hash的不同的文件以行微单位进行整合(git的单位是一行);head的指向也是指的是指向某一个分支下的当前的commit对象; 这样就避免了复制粘贴操作,所以就会很快

svn 创建分支是把原来的master拷贝了一份,复制出来来做。效率很低。

3. git本地的签名设置

作用区分开发人员身份,全局和项目局部必须有一个签名,否则无法commit, 签名取谁:就近原则

签名包含用户名和邮箱(邮箱没实际作用,仅仅为了区分身份)

1. 项目局部 存储位置在.git/config下的user节点

1.设置

git config user.name xxx
git config user.email xxx@yyy.com

2. 查看

git config --local --list

2. 全局 存储位置在~/.gitconfig 下的user节点

1.设置

git config --global user.name xxx
git config --global user.email xxx@yyy.com

2. 查看

git config --global --list

4. git的基本概念

1. 本地

1. 工作区
2. 缓存区
3. 本地仓库

2. 远程

1. 远程仓库

5. git本地的文件状态

1. untracked 未追踪 需要git add去追踪变为Staged

2. Unmodify 未编辑 如果被修改则变成Modified/使用git rm 则变为untracked

3. Modified 修改状态 可以git add 添加到暂存区staged/使用 git rm --cached 文件名 Unmodify

4. Staged 暂存状态 可以git commit 提交到本地库/git reset --soft HEAD^ 回到Modified

6. git本地一些基本命令

1. git init

初始化一个git仓库

2. git status

初始化一个git仓库

3. git add 文件名

追踪一个文件加入版本控制

增加一个文件到暂存区

4. git rm --cached 文件名

从暂存区移除

5. git commit -m ‘message’

提交到本地仓库

6. git reset --soft HEAD^

回到add的状态

7. git本地版本控制命令

1. git log

查看本地提交日志

2. git log --pretty=oneline

一行展示本地提交日志

3. git reflog

可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

包含当前版本到各个版本的步数

4. git reset --hard 版本hash

基于索引值来调整head

–xxx命令释义: 发挥作用的位置(工作区1 暂存区2 本地仓库3)

1. --soft 重置3 (重置到add状态)
2. --mixed 重置23
3. --hard 重置123

5. git reset --hard HEAD^^^

只能后退 ^^^ 代表回退3个版本

6. git reset --hard HEAD~5

只能后退 ~5 代表回退5个版本

7. git push 仓库地址别名 分支名 -f

本地回滚完后需要强制覆盖远程仓库

8. 比较本地差异

1. git diff 文件名

1.暂存区无 工作区和最后一次提交比较/2.暂存区无:工作区和暂存区的文件进行比较

2. git diff HEAD 文件名

对文件和本地库上个版本进行diff比较

3. git diff HEAD^^ 文件名

对文件和本地库上2个版本进行diff比较

4. git diff 不带文件名字

可以比较多个文件

9. git本地分支管理命令

1. git branch -v

查看本地分支

2. git branch 分支名字

以当前分支为基础创建分支

3. git checkout 分支名字

切换分支

4. git merge 的分有新功能的分支

合并分支, 修改的是当前分支

5. git branch -d 分支名字

删除分支,需提前切换到其他分支

远程分支删除git push origin --delete 分支名字

10. git解决本地冲突

1. git merge合并后切换出现冲突

2. 手动解决冲突,删除特殊符号

3. 解决完以后 git add . 标记为已解决

4. 随后直接git commit;切记不能够 -m ‘message’

11. tag 标签

tag是git版本库的一个标记,指向某个commit的指针。方便恢复

1. 创建tag

1. 轻量标签

git tag tagName

2. 附注标签 包含打标签者的名字、电子邮件地址、日期时间

git tag -a tagName -m ‘message’

3. 后期打标签 对过去的提交打标签

git tag -a tagName 版本hash戳

2. 查看tag

git tag

3. 删除tag

git tag -d tagName

之后再远程删除tag git push origin :refs/tags/tagName

4. 推送tag到远程仓库

git push 远程仓库地址别名 tagName

5. 使用tag

需要创建一个新的分支来使用这个标签

git checkout -b 新的分支名字 tagName(由于没有上游分支,所以需要 git push --set-upstream origin 新分支名字)

12. git 参数的简称

1. -u -set-upstream 一般只有同时存在多个远程仓库时才会用到

2. -r --recursive 递归

3. -i --interactive 交互式

13. git rebase

这个也是合并的命令, 只不过合并后各个分支的提交历史都是各自是一段,会比较好查看

1. git rebase 分支名

2. 合并有冲突,需要先git add . 再git rebase --continue

14. git stash

临时保存工作区修改

适用场景: 开发分支开发一半不想提交代码,hotfix分支需要修复bug, 使用git stash先保存dev的代码,hotfix修复完bug再到dev恢复回来。 (如果没有提交直接切分支,会丢失内容)

1. 保存stash

1. git stash 基本保存
2. git stash save ‘message’ 携带附加信息保存

2. 查看stash

git stash list

3. 应用 stash

1. git stash pop 出栈第一个stash并应用
2. git stash apply stashNumber 根据索引应用stash

4. 移除stash

1. git stash drop stashNumber 根据索引移除stash
2. git stash clear 移除所有stash

15. git cherry-pick

摘樱桃

可以把某次或者几次 commit 放到当前分支上来,只需知道他们的hash就可以

用法:git kcherry-pick hashA hashB

遇到冲突正常及解决即可

<think>首先,用户的问题是:“我想了解git lfs fetch --all命令的作用 请问git lfs fetch --all命令的作用”。用户指定了引用[1]、[2]和[3],这些引用是关于Git LFS的。 回顾系统级指令: - 所有行内数学表达式使用$...$格式(但这个主题不涉及数学,所以可能不需要)。 - 独立公式使用$$...$$格式并单独成段(同样,这里不需要)。 - LaTeX语法正确(确保任何公式正确)。 - 使用中文回答。 - 生成相关问题。 - 引用末尾添加引用标识,如[^1]。 用户可见层的指令: - 回答结构清晰,逐步解决问题。 - 保证回答真实可靠。 用户提供的引用: - [^1]: 解释了git lfs fetch命令获取缺失的Git LFS对象但不应用到工作目录中,需要用git lfs checkout或git lfs pull来应用。 - [^2]: 介绍git-lfs命令,包括获取对象的例子。 - [^3]: 提到git lfs migrate命令和其他。 用户的问题焦点是git lfs fetch --all命令的作用。我需要基于引用和一般知识来回答。 从引用[^1]:"git lfs fetch命令会从远程仓库中获取所有缺失的Git LFS对象,但不会将这些对象应用到你的工作目录中。" 命令git lfs fetch --all。--all选项可能意味着获取所有引用或所有对象,而不是只缺失的。 在Git LFS上下文中,git lfs fetch --all很可能用于获取所有分支或所有标签的对象。 标准Git LFS文档: - git lfs fetch:默认获取当前分支的缺失对象。 - git lfs fetch --all:获取所有远程引用的对象(如所有分支和标签)。 这可以从引用推断: - 引用[^1]提到git lfs fetch获取缺失对象。 - --all选项在Git命令中常用于指定所有引用。 引用[^2]在"3.3 从远程仓库获取Git LFS对象"部分没有明确提到--all,但有git lfs fetch。 引用[^3]提到git lfs migrate,但用户询问的是fetch。 我应该整合知识: - git lfs fetch --all 命令的作用是从远程仓库下载所有缺失的Git LFS对象,覆盖所有分支和标签,而不仅仅是当前分支。 - 类似于Gitgit fetch --all,但针对大文件。 结构化回答: 1. **解释命令的作用**:清晰介绍git lfs fetch --all。 2. **对比默认行为**:解释与git lfs fetch的区别。 3. **使用场景**:为什么需要这个命令。 4. **注意事项**:获取但不应用到工作目录。 5. **引用相关部分**:末尾添加引用标识。 生成相关问题: - 作为系统指令的一部分,在回答后生成相关问题。 - 相关问题应该基于主题,如Git LFS管理、其他命令等。 回答语言:中文。 大纲: 1. 开头直接回答作用。 2. 详细解释。 3. 步骤或示例。 4. 生成相关问题。 最终输出: - 回答部分。 - §§相关问题§§部分。 确保真实可靠:基于引用和标准知识。 </think>### git lfs fetch --all 命令的作用 Git LFS (Large File Storage) 是 Git 的一个扩展,用于高效管理大文件(如视频、图像等二进制文件)。`git lfs fetch --all` 命令的核心作用是:**从远程仓库下载所有分支和标签引用的缺失 Git LFS 对象,但不应用到本地工作目录中**。以下是详细的解释,帮助您逐步理解: 1. **基本作用**: - `git lfs fetch --all` 会连接到远程仓库(例如 GitHub、GitLab),检查所有分支(如 `main`、`dev`)和标签(如 `v1.0`)中引用的 Git LFS 对象(即大文件)。 - 它只下载那些本地仓库缺失的大文件(例如,文件未被缓存或之前未下载过)。 - 下载后,对象存储在 Git LFS 的本地缓存中(通常在 `.git/lfs/objects` 目录),但不会自动更新您的工作目录(即您看到的代码文件)。 - 这与标准的 `git lfs fetch` 不同:`git lfs fetch` 默认仅获取当前分支的缺失对象,而 `--all` 选项扩展为覆盖所有远程引用(分支和标签)。这在团队协作中特别有用,当您需要同步多个分支的大文件时[^1][^2]。 2. **为什么需要这个命令**: - **场景示例**:假设您克隆了一个仓库,但只检出 `main` 分支。此时,其他分支(如 `feature-branch`)可能引用了一些未被下载的大文件。运行 `git lfs fetch --all` 可以确保所有分支和标签的大文件都被预加载到本地缓存中,避免后续操作(如切换分支)时出现延迟。 - **优点**: - 提高效率:减少网络请求次数,一次性获取所有缺失对象。 - 避免错误:如果工作目录需要特定分支的大文件(例如 `git checkout feature-branch`),提前获取可以防止“文件丢失”错误。 - 适用于分布式团队:当多个成员在不同分支工作时,此命令确保本地缓存完整,便于协作[^1][^3]。 3. **如何使用及注意事项**: - **基本用法**: ```bash git lfs fetch --all ``` 执行后,Git LFS 会显示进度(如下载了多少文件)。 - **后续步骤**:下载的对象仅存储在缓存中。要应用到工作目录,您需要运行: - `git lfs checkout`:手动应用所有已获取的对象。 - 或 `git lfs pull`:相当于 `git lfs fetch` + `git lfs checkout`(但 `pull` 默认针对当前分支,而非所有引用)[^1]。 - **注意事项**: - 网络依赖:需要稳定的网络连接,因为大文件传输可能耗时。 - 存储空间:下载的对象会占用本地磁盘空间。如果缓存过大,可以使用 `git lfs prune` 清理。 - 权限要求:您需要有远程仓库的读取权限。 -Git 命令集成:`git fetch --all` 获取所有引用的元数据,但不处理大文件;而 `git lfs fetch --all` 专门处理大文件内容。两者通常结合使用[^2][^3]。 4. **与相关命令对比**: - `git lfs fetch`:仅获取当前分支的缺失对象。 - `git lfs fetch --all`:获取所有分支和标签的缺失对象(更全面)。 - `git lfs pull`:等同于 `git lfs fetch` + `git lfs checkout`(但只针对当前分支)。 - 引用[^1]强调了 `fetch` 命令的局限性(不更新工作目录),而 `git lfs fetch --all` 扩展了范围。 总结来说,`git lfs fetch --all` 是优化 Git LFS 管理的关键命令,特别适合需要一次性同步多个分支大文件的场景。确保在运行后使用 `git lfs checkout` 来更新工作目录[^1][^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值