git学习日志

你看到的是 Vim 文本编辑器的界面,并非 git 的窗口。这是你通过 vim hello.txt 命令打开的新文件。以下是分步操作指南:


1. 进入编辑模式

  • 按下键盘上的 i 键(进入 "INSERT" 模式),此时左下角会显示 -- INSERT --

  • 现在可以输入文本,例如:

    复制代码
    Hello, world!

2. 保存并退出

  • 按下 Esc 键退出编辑模式(回到 "NORMAL" 模式)。
  • 输入 :wq 并按回车(保存文件并退出 Vim):
    • :w 表示保存(write)
    • :q 表示退出(quit)

3. 验证文件内容

  • 退出 Vim 后,在终端输入 cat hello.txt,会显示你写入的内容:

    复制代码
    Hello, world!

关键快捷键总结

操作 按键
进入编辑模式 i
退出编辑模式 Esc
保存并退出 Esc 后输入 :wq + 回车
不保存强制退出 Esc 后输入 :q! + 回车

常见问题

  • 如果卡在 Vim 中无法退出,确保先按 Esc 回到普通模式,再输入 :q! 强制退出。
  • 你看到的 0,0-1 All 表示当前光标位置和文件状态,这是 Vim 的正常界面提示。

main和master

你的推送被拒绝是因为远程仓库的 main 分支有本地不包含的新提交(例如直接在 GitHub 网页修改了文件,或从其他设备推送过代码)。以下是解决方案:


原因分析

  • 根本问题 :本地分支的提交历史与远程分支 分叉(即远程分支有本地没有的提交)。
  • Git 保护机制 :Git 默认禁止覆盖远程历史(除非强制推送),因此提示 non-fast-forward 错误。

解决方案

方法 1:合并远程变更(推荐)

此方法会保留远程和本地的所有提交记录。

  1. 拉取远程最新代码并合并

    bash 复制代码
    git pull origin main
    • 如果提示冲突,需手动解决(见下文 冲突解决 部分)。
  2. 重新推送代码

    bash 复制代码
    git push origin main

方法 2:变基操作(适合熟悉 Git 的用户)

此方法将本地提交"嫁接"到远程最新提交之后,保持提交历史线性。

  1. 拉取远程代码并变基

    bash 复制代码
    git pull --rebase origin main
    • 如果冲突,解决后运行 git rebase --continue
  2. 推送代码

    bash 复制代码
    git push origin main

方法 3:强制推送(谨慎使用!)

此方法会 覆盖远程分支,仅在你明确需要丢弃远程修改时使用!

bash 复制代码
git push --force origin main
# 或更安全的强制推送(保留未被覆盖的提交)
git push --force-with-lease origin main

冲突解决流程

如果 git pullgit rebase 提示冲突:

  1. 打开冲突文件 ,找到类似以下标记:

    plaintext 复制代码
    <<<<<<< HEAD
    本地修改的内容
    =======
    远程修改的内容
    >>>>>>> 提交哈希值
  2. 手动编辑文件,删除冲突标记并保留需要的代码。

  3. 标记冲突已解决

    bash 复制代码
    git add 冲突文件名
  4. 继续操作

    • 如果是 git pull(合并冲突):

      bash 复制代码
      git commit -m "Merge remote changes"
    • 如果是 git rebase

      bash 复制代码
      git rebase --continue

操作总结

场景 命令 说明
拉取并合并 git pull origin main 保留所有提交历史,适合大多数情况
拉取并变基 git pull --rebase origin main 保持线性提交历史,适合整理本地提交
强制推送 git push --force origin main 覆盖远程分支,慎用!

如何避免此问题?

  1. 推送前先拉取 :养成习惯,每次 git push 前先运行 git pull
  2. 减少直接网页修改:尽量避免在 GitHub 网页直接修改代码,优先通过本地操作。

如果仍有问题,请提供 git log --graph --oneline --all 的输出,我会进一步帮你分析分支关系!

常用命令

你可以使用以下命令添加所有未跟踪文件:

正确命令:

bash 复制代码
git add .       # 添加当前目录及子目录所有新文件和修改文件(推荐)
git add -A      # 添加仓库中所有新文件、修改文件和删除文件
git add --all   # 同上(-A 的完整写法)

操作步骤演示

bash 复制代码
# 1. 添加所有文件
git add .

# 2. 查看状态(应看到文件变为待提交状态)
git status

# 3. 提交文件
git commit -m "添加所有初始文件"

# 4. 推送到远程仓库(可选)
git push origin main

附加说明

命令 作用范围 适用场景
git add . 当前目录及子目录(新增/修改) 大多数情况
git add -A 整个仓库(新增/修改/删除) 需要同步删除操作时
git add filename 指定单个文件 需要选择性添加时

常见问题排查

如果仍然无法添加文件:

  1. 检查文件是否真实存在:

    bash 复制代码
    ls -l dataPart1-2.py ultralytics/  # 查看具体文件
  2. 检查是否被 .gitignore 文件过滤:

    bash 复制代码
    cat .gitignore  # 查看忽略规则
  3. 检查文件路径是否正确(注意大小写敏感)

相关推荐
DKPT1 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Green1Leaves1 小时前
pytorch学习-11卷积神经网络(高级篇)
pytorch·学习·cnn
DKPT8 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好好研究11 小时前
学习栈和队列的插入和删除操作
数据结构·学习
新中地GIS开发老师12 小时前
新发布:26考研院校和专业大纲
学习·考研·arcgis·大学生·遥感·gis开发·地理信息科学
SH11HF12 小时前
小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)
学习·云计算
Frank学习路上13 小时前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode
Chef_Chen14 小时前
从0开始学习计算机视觉--Day07--神经网络
神经网络·学习·计算机视觉
&Sinnt&14 小时前
Git 版本控制完全指南:从入门到精通
git·后端
X_StarX16 小时前
【Unity笔记02】订阅事件-自动开门
笔记·学习·unity·游戏引擎·游戏开发·大学生