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. 检查文件路径是否正确(注意大小写敏感)

相关推荐
GHL2842710902 小时前
i++汇编学习
汇编·学习
A9better5 小时前
嵌入式开发学习日志31——stm32之外部中断与定时器中断的差别与选择
stm32·单片机·学习
zhangrelay5 小时前
ROS2学习研究版本推荐:Jazzy Jalisco(LTS长期支持版)AI版本251001
笔记·学习
xyx-3v6 小时前
已知三极管的类型(NPN/PNP)和基极引脚,如何区分集电极(c)和发射极(e)
单片机·嵌入式硬件·学习
大白的编程日记.6 小时前
【Linux学习笔记】线程概念和控制(二)
linux·笔记·学习
半夏知半秋7 小时前
skynet-socket.lua源码分析
服务器·开发语言·学习·架构·lua
低代码布道师7 小时前
学习低代码,需要什么基础?
学习·低代码
西猫雷婶7 小时前
random.shuffle()函数随机打乱数据
开发语言·pytorch·python·学习·算法·线性回归·numpy
随机惯性粒子群7 小时前
STM32控制开发学习笔记【基于STM32 HAL库】
笔记·stm32·嵌入式硬件·学习
一條狗8 小时前
学习日报 20250930|多优惠券叠加核销及场景互斥逻辑
学习·核销