Git 代码管理流程与常见问题解决-学习记录3

Git 代码管理流程与常见问题解决

在现代软件开发中,版本控制是团队协作和代码管理的重要工具。Git 作为最流行的版本控制系统之一,帮助开发者追踪代码变更并与远程仓库(如 GitHub)同步。本文将详细介绍如何将 软件_v2 项目初始化为 Git 仓库并推送到 GitHub 远程仓库,同时解决可能遇到的常见问题。


在这里插入图片描述

项目初始化与推送步骤

以下是将本地项目初始化为 Git 仓库并推送到远程 GitHub 仓库的具体步骤:

1. 进入项目目录

使用命令行工具(如 CMD、PowerShell 或 Git Bash)进入项目所在的文件夹。例如:

cd e:\trae_test\软件_v2

2. 初始化 Git 仓库

在项目根目录下运行以下命令,初始化一个本地 Git 仓库。这会在目录中创建一个 .git 隐藏文件夹,用于存储版本控制信息:

git init

3. 添加文件到暂存区

使用以下命令将项目中的所有文件添加到 Git 的暂存区,准备提交:

git add .

4. 提交更改到本地仓库

通过 git commit 命令将暂存区的文件提交到本地仓库,并附带一条描述性的提交信息:

git commit -m "Initial commit"

5. 关联远程仓库

使用 git remote add 命令将本地仓库与远程 GitHub 仓库关联起来,origin 是远程仓库的默认别名:

git remote add origin https://github.com/yangyuqing15715165798/trae_tev_aa_uhf_v1

6. 检查本地分支名称

在推送之前,确认当前本地分支的名称。通常默认分支是 mastermain。运行以下命令查看:

git branch

输出中带有 * 号的分支即为当前分支,例如 * master

7. 推送到远程仓库

使用 git push 命令将本地分支的提交推送到远程仓库。-u 参数建立本地分支与远程分支的跟踪关系,方便后续推送:

git push -u origin master

注意:如果你的分支名称是 main,则使用 git push -u origin main

完成以上步骤后,项目代码将成功托管在 GitHub 远程仓库中。


常见问题及解决方法

在操作 Git 时,可能会遇到一些问题。以下是两个典型问题及其解决方法。

常见问题 1:推送被拒绝

在执行 git push -u origin master 时,可能会看到以下错误:

To https://github.com/yangyuqing15715165798/trae_tev_aa_uhf_v1
! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/yangyuqing15715165798/trae_tev_aa_uhf_v1'
hint: Updates were rejected because the remote contains work that you do not have locally.
详细解释原因:

这个错误表示你的远程仓库(例如 GitHub 上的仓库)包含了你本地仓库当前没有的提交或更改。这通常发生在其他人向远程仓库推送了更新,或者你直接在远程仓库(如 GitHub 网站)上做了修改(比如编辑 README)。Git 为了防止你的本地提交覆盖掉远程的新内容,拒绝了直接推送。

这个 Git 错误 ! [rejected] master -> master (fetch first) 表示推送(push)操作被拒绝了。

错误含义:

核心提示是 Updates were rejected because the remote contains work that you do not have locally ,意思是远程仓库 ( origin ,也就是你在 GitHub 上的仓库 trae_tev_aa_uhf_v1 ) 上包含了你本地仓库目前没有的更改或提交。

为什么会发生这种情况?

这通常发生在以下几种情况:

  1. 在你上次从远程仓库拉取(pull)或克隆(clone)代码之后,有其他人(或者你自己从另一台电脑)向远程仓库推送了新的更改。
  2. 你直接在 GitHub 网站上进行了一些操作,比如编辑了文件、创建了 README.md 或添加了 LICENSE 文件等,这些操作也算作远程仓库的更改。
    为了防止你的本地提交覆盖掉远程仓库上已有的新内容,Git 拒绝了你的直接推送请求。
解决方法:

你需要先将远程仓库的最新更改拉取到本地,与你的本地更改合并后,再进行推送。

  1. 拉取并合并远程更改:
    执行 git pull 命令,将远程 origin 仓库的 master (或 main) 分支的最新内容拉取下来并尝试与本地分支合并。

    git pull origin master
    

    如果你的分支是 main,则使用 git pull origin main

    • 注意: 如果本地和远程都修改了同一个文件的相同部分,可能会发生合并冲突 (merge conflict)。你需要根据 Git 的提示手动解决这些冲突,然后再次执行 git add .git commit 来完成合并。
    • 在执行 git pull 时,Git 可能会自动打开一个文本编辑器让你输入合并信息(merge commit message),通常直接保存并关闭编辑器即可。
  • 如果本地和远程都修改了同一个文件的同一部分,可能会发生 合并冲突 (merge conflict) 。这时 Git 会提示你哪些文件存在冲突,你需要手动编辑这些文件,解决冲突标记(<<<<<<<, =======, >>>>>>>),然后再次 git add 和 git commit 来完成合并。不过,对于你目前的情况,如果只是添加了新文件,通常不会有冲突。
  1. 再次推送:
    成功拉取并合并(解决冲突后)之后,你的本地仓库就既包含了远程的更新,也包含了你自己的提交。现在可以再次尝试推送:
    git push origin master
    
    在你的分支是 main,则使用 git push origin main
    简单来说,就是先 git pull 同步远程的更新,然后再 git push 把你的本地更新推上去。

下面是简洁陈述原因:

原因

远程仓库包含本地没有的提交或更改,可能是因为:

  • 其他开发者推送了更新。
  • 你直接在 GitHub 上修改了文件(如创建 README)。

Git 为了防止覆盖远程内容,拒绝了推送请求。

解决方法
  1. 拉取并合并远程更改
    使用 git pull 拉取远程仓库的最新内容并尝试合并:

    git pull origin master
    

    注意:如果分支是 main,则使用 git pull origin main。若出现合并冲突,需手动编辑冲突文件,解决后运行 git add .git commit

  2. 再次推送
    合并成功后,重新推送:

    git push origin master
    

常见问题 2:合并提交界面

执行 git pull origin master 后,可能会弹出以下界面:

Merge branch 'master' of https://github.com/yangyuqing15715165798/trae_tev_aa_uhf_v1
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts the commit.
原因

Git 从远程拉取了更改,并需要创建一个合并提交。它打开默认编辑器(如 Vim)让你确认提交信息。

解决方法
  • 保存并退出
    默认信息通常已足够。按以下步骤操作(以 Vim 为例):

    1. Esc 进入普通模式。
    2. 输入 :wq 并按 Enter 保存退出。
      合并完成后,可继续推送。
  • 中止合并
    若不想合并,输入 :q! 并按 Enter 退出,合并将被取消。


常见问题 3:

73856@DESKTOP-E8TUJO3 MINGW64 /e/trae_test/开关柜局放软件_v2 (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README_PyQt5_to_PySide6.md

nothing added to commit but untracked files present (use "git add" to track)    

73856@DESKTOP-E8TUJO3 MINGW64 /e/trae_test/开关柜局放软件_v2 (master)
$ git add .

73856@DESKTOP-E8TUJO3 MINGW64 /e/trae_test/开关柜局放软件_v2 (master)
$ git commit -m "第4次提交"
[master e1b325d] 绗?娆℃彁浜
 1 file changed, 166 insertions(+)
 create mode 100644 README_PyQt5_to_PySide6.md
fatal: unknown write failure on standard output

73856@DESKTOP-E8TUJO3 MINGW64 /e/trae_test/开关柜局放软件_v2 (master)
$ git pull origin master 
error: RPC failed; curl 28 Recv failure: Connection was reset
fatal: expected flush after ref listing

让我们来分析一下遇到的 Git 报错信息:

  1. Untracked files: ... README_PyQt5_to_PySide6.md ... nothing added to commit but untracked files present (use "git add" to track)

    • 含义: 这条信息告诉你,Git 在你的工作目录中发现了一个新文件 README_PyQt5_to_PySide6.md,但这个文件目前还没有被 Git 跟踪。Git 提示你,如果你想在下一次提交中包含这个文件,需要使用 git add 命令来添加它。
    • 你的操作: 你执行了 git add .,这个命令会将当前目录下所有未跟踪的文件(包括 README_PyQt5_to_PySide6.md)和已修改的文件添加到 Git 的暂存区,准备进行提交。这是正确的操作。
  2. git commit -m "第4次提交" 的输出

    • [master e1b325d] 绗?娆℃彁浜: 这表示在 master 分支上成功创建了一个新的提交,提交的哈希值缩写是 e1b325d。但是,你的提交信息 “第4次提交” 显示成了乱码 (绗?娆℃彁浜)。这通常是由于你的终端(MINGW64/Git Bash)和 Git 处理中文时的字符编码设置不匹配导致的。
    • 1 file changed, 166 insertions(+): 这说明这次提交更改了 1 个文件(就是你新添加的 README 文件),增加了 166 行。
    • create mode 100644 README_PyQt5_to_PySide6.md: 这表明 README_PyQt5_to_PySide6.md 文件是在这次提交中被新创建的。
    • fatal: unknown write failure on standard output: 这是一个比较严重的错误。它意味着 Git 在尝试将输出信息(比如提交确认信息)写入到你的终端(标准输出)时遇到了问题。这可能是由终端本身不稳定、系统资源限制或其他程序冲突引起的。尽管出现了这个错误,但你的本地提交(commit)很可能已经成功完成了,只是最后向终端显示结果时失败了。你可以使用 git log 来查看最新的提交记录确认一下。
  3. git pull origin master 的输出

    • error: RPC failed; curl 28 Recv failure: Connection was reset: 这个错误明确指向了网络问题。curl 28 通常表示在数据传输过程中连接超时或被重置。当你尝试从远程仓库 originmaster 分支拉取更新时,你的计算机和远程服务器之间的网络连接被意外中断了。
    • fatal: expected flush after ref listing: 这个错误紧随 RPC 错误之后出现,意味着 Git 在从远程服务器获取了引用列表(比如分支和标签信息)后,期望接收更多的数据,但连接在此之前就被关闭了。

建议:

  • 乱码问题:
    • 尝试在 Git Bash 或你的终端中设置正确的编码,通常 UTF-8 是比较好的选择。
    • 可以尝试在 Git 配置中设置 git config --global core.quotepath false,这有时能帮助正确显示非 ASCII 字符的文件名和提交信息。
  • fatal: unknown write failure on standard output:
    • 检查你的终端是否稳定,尝试重启终端或电脑。
    • 使用 git log -1 查看最新的提交是否确实是你刚才提交的 “第4次提交”(即使信息是乱码,内容和文件应该是对的)。
  • git pull 网络错误:
    • 检查你的网络连接是否正常。
    • 如果你在使用 VPN 或代理,尝试暂时禁用它们再试。
    • 检查防火墙设置是否阻止了 Git 的网络访问。
    • 检查远程仓库(比如 GitHub、Gitee)的状态页,看是否有服务中断。
    • 稍后再尝试 git pull,有时网络问题是暂时的。

总的来说,你成功地将新文件添加并提交到了本地仓库,但遇到了终端显示乱码、写入标准输出失败以及网络连接问题。主要需要解决的是网络问题,才能与远程仓库同步。

总结

通过以上步骤,你可以将本地项目初始化为 Git 仓库并推送到 GitHub,同时掌握解决推送被拒绝和合并提交界面的方法。Git 的强大之处在于版本追踪和协作支持,建议在实际项目中多加实践,熟练掌握其用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值