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. 检查本地分支名称
在推送之前,确认当前本地分支的名称。通常默认分支是 master
或 main
。运行以下命令查看:
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 ) 上包含了你本地仓库目前没有的更改或提交。
为什么会发生这种情况?
这通常发生在以下几种情况:
- 在你上次从远程仓库拉取(pull)或克隆(clone)代码之后,有其他人(或者你自己从另一台电脑)向远程仓库推送了新的更改。
- 你直接在 GitHub 网站上进行了一些操作,比如编辑了文件、创建了 README.md 或添加了 LICENSE 文件等,这些操作也算作远程仓库的更改。
为了防止你的本地提交覆盖掉远程仓库上已有的新内容,Git 拒绝了你的直接推送请求。
解决方法:
你需要先将远程仓库的最新更改拉取到本地,与你的本地更改合并后,再进行推送。
-
拉取并合并远程更改:
执行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 的提示手动解决这些冲突,然后再次执行
- 如果本地和远程都修改了同一个文件的同一部分,可能会发生 合并冲突 (merge conflict) 。这时 Git 会提示你哪些文件存在冲突,你需要手动编辑这些文件,解决冲突标记(<<<<<<<, =======, >>>>>>>),然后再次 git add 和 git commit 来完成合并。不过,对于你目前的情况,如果只是添加了新文件,通常不会有冲突。
- 再次推送:
成功拉取并合并(解决冲突后)之后,你的本地仓库就既包含了远程的更新,也包含了你自己的提交。现在可以再次尝试推送:
在你的分支是git push origin master
main
,则使用git push origin main
简单来说,就是先 git pull 同步远程的更新,然后再 git push 把你的本地更新推上去。
下面是简洁陈述原因:
原因
远程仓库包含本地没有的提交或更改,可能是因为:
- 其他开发者推送了更新。
- 你直接在 GitHub 上修改了文件(如创建 README)。
Git 为了防止覆盖远程内容,拒绝了推送请求。
解决方法
-
拉取并合并远程更改
使用git pull
拉取远程仓库的最新内容并尝试合并:git pull origin master
注意:如果分支是
main
,则使用git pull origin main
。若出现合并冲突,需手动编辑冲突文件,解决后运行git add .
和git commit
。 -
再次推送
合并成功后,重新推送: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 为例):- 按
Esc
进入普通模式。 - 输入
: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 报错信息:
-
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 的暂存区,准备进行提交。这是正确的操作。
- 含义: 这条信息告诉你,Git 在你的工作目录中发现了一个新文件
-
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
来查看最新的提交记录确认一下。
-
git pull origin master
的输出error: RPC failed; curl 28 Recv failure: Connection was reset
: 这个错误明确指向了网络问题。curl 28
通常表示在数据传输过程中连接超时或被重置。当你尝试从远程仓库origin
的master
分支拉取更新时,你的计算机和远程服务器之间的网络连接被意外中断了。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 的强大之处在于版本追踪和协作支持,建议在实际项目中多加实践,熟练掌握其用法。