Git 笔记
服务器远程使用记录。
概述
已经建好仓库,cd
到仓库路径下。
Git:分布式版本管理工具,去中心化(每个分支都是一个中心),支持本地仓库存储。使用可参考Git 基础 - 远程仓库的使用。
Git中三类文件:
- 被追踪的(tracked): 已经加入文档库
- 不被追踪的(untracked): 没有加入文档库
- 忽略的(ignored): 忽略那些不需要管理的文件夹或文件
Git之所以比其他版本控制系统设计的优秀,因为Git跟踪并管理的是修改,而非文件。参考[管理修改-廖雪峰的官方网站]。
Git是分布式版本控制工具,它是有一个暂存区概念的,每一次修改了需要add到暂存区然后在commit提交,如果修改了直接提交的话,是不会成功的,因为提交只会提交暂存区中有的修改。可以使用git diff HEAD -- filename
来查看工作区和版本库里面最新版本的区别。关于Git的各个区可参考[Git 工作区、暂存区和版本库]。
git clone -b my-feature-branch https://github.com/user/repo.git
【克隆一个名为 my-feature-branch 的分支】
git clone -b master https://github.com/username/example.git
【拉取某个分支(示例中是master分支)】
LFS
tutorials/git-lfs
Git LFS 操作指南
使用 Git LFS 的核心思想就是把需要进行版本管理、但又占用很大空间的那部分文件独立于 Git 仓库进行管理。从而加快克隆仓库本身的速度,同时获得灵活的管理 LFS 对象的能力。
默认情况下,只有当前 commit 下的 LFS 对象的当前版本才会被获取。
# 初始化 Git LFS
git lfs install
# 查看当前使用 Git LFS 管理的匹配列表
git lfs track
# 使用 Git LFS 管理指定的文件
git lfs track "*.psd"
# 不再使用 Git LFS 管理指定的文件
git lfs untrack "*.psd"
# 类似 `git status`,查看当前 Git LFS 对象的状态
git lfs status
# 枚举目前所有被 Git LFS 管理的具体文件
git lfs ls-files
# 检查当前所用 Git LFS 的版本
git lfs version
# 针对使用了 LFS 的仓库进行了特别优化的 clone 命令,显著提升获取
# LFS 对象的速度,接受和 `git clone` 一样的参数。 [1] [2]
git lfs clone https://github.com/user/repo.git
如果正在克隆包含大量 LFS 文件的仓库,显式使用 git lfs clone
命令可提供更好的性能。该命令不会一次下载一个 Git LFS 文件,而是等到检出(checkout)完成后再批量下载所有必需的 Git LFS 文件。这利用了并行下载的优势,并显著减少了产生的 HTTP 请求和进程的数量(这对于提高 Windows 的性能尤为重要)。该命令同样也兼容没有使用 LFS 的仓库。即无论要克隆的仓库是否使用 LFS,都可以使用 git lfs clone
命令来进行克隆。
使用
常用命令:
git remote
查看本地添加了哪些远程分支地址;git remote -v
详细git status
查看当前仓库的状态。显示当前的工作目录状态,包括你是否处于一个分支上。检查本地 Git 仓库中是否有未提交的更改。出现 working tree clean表示工作区很干净,没有被修改的文件或者没有需要提交的文件;否则可以结合git diff filename
查看文件被修改情况git log
查看提交日记,键入q
回到主界面;git log --oneline
查看简介版本的日志git diff filename
比较文件的变动,必须在没有add进暂存区之前进行比较,如果已经添加进暂存区之后将无法比较出区别git remote remove origin
从本地 Git 仓库中删除名为 origin 的远程仓库引用。这个命令不会影响远程仓库本身,只会从本地配置中移除对它的引用
分支管理
git branch
查看并列出仓库中的所有本地分支git branch -a
查看所有分支git branch --show-current
输出当前所在的分支名git symbolic-ref --short HEAD
输出 HEAD 引用的短名称,也就是当前分支的名称git branch branchname
手动创建一个分支git pull origin master
这里git pull
表示将远程origin主机的master分支最新内容拉取过来和本地的当前分支进行合并。git pull = git fetch + git mergegit checkout test
切换到test分支
修改提交
git add *
将所有文件添加到缓存区;git add filename
将文件filename添加到缓存git commit -m 'description'
将缓存区内容添加到仓库中git commit -am 'description'
如果觉得 git add 提交缓存的流程太过繁琐,Git 也允许用 -a 选项跳过这一步git push <远程主机名> <本地分支名> <远程分支名>
如果当前分支只有一个远程分支,那么主机名都可以省略,形如git push
,可以使用git branch -r
,查看远程的分支名
远程地址修改
可以先用使用命令git remote -v
来查看当前配置的远程仓库地址。
git remote add neworigin https://newgit.com/usr/test
添加一个名为 neworigin 的远程仓库,地址为 https://newgit.com/usr/testgit remote set-url origin https://newgit.com/usr/test
如果你想要修改 origin 的地址
删除某一个分支
在删除分支之前,最好切换到其他分支,以确保不会丢失工作。例如,切换到 master 分支:git checkout master
- 删除本地分支
方法一:使用
git branch -d
(推荐,更安全)。此命令会尝试删除指定的本地分支。如果该分支尚未合并到其它分支,Git 会阻止您删除它。
git branch -d branch_to_delete
将 branch_to_delete 替换为要删除的分支名称。
方法二:使用 git branch -D(强制删除,谨慎使用)。此命令会强制删除指定的本地分支,即使它尚未合并到其它分支。谨慎使用此选项,以免丢失未合并的更改。
git branch -D branch_to_delete
- 删除远程分支
要删除远程分支,请使用以下命令:
git push origin --delete branch_to_delete
执行此命令后,远程分支将从远程仓库中删除。请注意,在执行此操作之前,确保您确实要删除此分支,并且已将其合并到其他分支(如果需要的话)。因为删除远程分支后,恢复起来会比较困难。
本地变动->更新远程
本地仓库变动,更新到远程仓库时:
git pull 报错:error: Pulling is not possible because you have unmerged files.
# 确保变动已经提交:
## 推送之前,确保已经使用 git add 将变动的文件添加到暂存区,然后使用 git commit 提交这些变动
git add . 【或者 git add <file1> <file2> ...】
git commit -m "Your commit message"
# 检查远程仓库的别名(可选):
## 通常远程仓库的别名是 origin,也可能不同
git remote -v
# 拉取远程分支的变动(可选):
## 推送之前,通常建议先拉取远程分支的最新变动,以避免直接推送时可能发生的冲突。
git pull origin <branch-name>
# 推送到远程仓库:
## 如果之前没有设置上游分支,可能需要指定远程仓库和分支:
git push origin <branch-name>
## 如果已经设置了上游分支,可以简化命令为:
git push
本地仅推送新分支
如果本地目录中仅有打算推送新分支的代码,而不是一个完整的Git仓库,需要先将本地目录初始化为一个Git仓库,然后将代码添加到新的分支,最后将新分支推送到远程仓库。具体步骤如下。
-
确保在本地代码目录中:可使用命令行工具(如Terminal或Command Prompt)进入代码目录。
-
初始化Git仓库:在本地代码目录中,初始化一个新的Git仓库:
git init
-
添加远程仓库:将远程仓库添加到本地Git仓库。假设远程仓库地址为https://github.com/your_username/your_repository.git,可使用:
git remote add origin https://github.com/your_username/your_repository.git
-
创建新分支:在本地创建一个新的分支。假设要创建一个名为new_branch的新分支,使用以下命令:
git checkout -b new_branch
上述命令会创建一个名为new_branch的新分支,并自动切换到这个新分支。 -
添加并提交代码:将本地代码添加到新分支,并创建一个新的提交。例如:
git add .
git commit -m "Your commit message"
这些命令会将所有修改添加到暂存区,然后创建一个新的提交。 -
推送新分支到远程仓库:最后,使用git push命令将新分支推送到远程仓库。假设远程仓库的名称是origin(这是Git的默认设置),可以使用以下命令:
git push -u origin new_branch
这个命令会将new_branch分支推送到origin远程仓库。-u选项会将origin设置为new_branch的上游仓库,这意味着在以后的git pull和git push命令中,可以省略远程仓库和分支的名称。
基于已有项目创建新分支
基于已有的Git项目创建一个新的分支,并在本地进行修改后同步至远程端,可以按照以下步骤进行:
-
切换到现有的分支,确保你在想要基于其创建新分支的现有分支上。假设这个分支叫做 test:
git checkout test
-
基于当前分支 test 创建一个新的分支 test_new 并立即切换到这个新分支:
git checkout -b test_new
-
进行本地修改,在 test_new 分支上进行你的修改。这可能包括添加文件、修改文件内容等。修改完成后,使用以下命令将这些更改暂存并提交:
git add .
git commit -m "Your commit message"
-
将本地的 test_new 分支推送到远程仓库。这会创建远程仓库中的对应分支:
git push -u origin test_new
其中-u
参数设置了上游分支,这样以后只需要使用git push
来推送更改。 -
使用以下命令来查看远程仓库的分支状态:
git branch -r
-
如果需要切换回原来的 test 分支,可以使用:
git checkout test
-
(未用)如果在 test 分支上也需要最新的更改,可以使用以下命令来拉取远程分支的更改并合并到当前分支:
git pull origin test
更新gitignore并生效
.gitignore
文件的规则是立即生效的,但是它只对未追踪的文件(即那些没有被 Git 添加到暂存区的文件)有效。如果你修改了 .gitignore
文件,但是之前已经追踪了应该被忽略的文件,那么这些文件会继续被 Git 追踪。
要使.gitignore
文件更新后生效,请按照以下步骤操作:
-
编辑
.gitignore
文件:打开项目根目录下的.gitignore
文件,对其进行编辑以添加、删除或修改规则。 -
保存
.gitignore
文件:保存对.gitignore
文件所做的更改。 -
清除Git缓存:运行以下命令以清除Git对已忽略文件的缓存:
git rm -r --cached .
这将递归地从Git索引中移除项目根目录下的所有文件,但不会删除实际文件。
-
重新添加文件到Git:运行以下命令以重新添加文件到Git索引:
git add .
这将递归地将项目根目录下的所有文件添加到Git索引。此时,Git将根据更新后的
.gitignore
规则忽略文件。 -
提交更改:运行以下命令以提交对
.gitignore
文件及Git索引的更改:git commit -m "Update .gitignore"
-
推送更改:如果需要将更改推送到远程仓库,请运行以下命令:
git push
现在,更新后的.gitignore
规则应该已经生效。
重新上传本地项目
清除本地的 Git 信息(包括 .git 目录和所有与 Git 相关的元数据),然后重新将本地项目上传到远程仓库。
假设拟推送的远程仓库地址是 https://github.com/yourusername/your-repo.git。
【rm -rf .git】删除所有 Git 相关的元数据,包括提交历史和分支信息。
【git init】重新初始化一个新的 Git 仓库。
【git remote set-url origin https://github.com/yourusername/your-repo.git】将远程仓库地址添加到本地仓库中。
【git lfs track ".safetensors" ".pt" ".onnx" ".zip" "*.plan"】有大文件时。
【git lfs ls-files】查看是否track成功。
【git add .】【git commit -m "Initial commit"】
【git push --set-upstream origin master】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!