You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需克隆,如何将本地目录的变更提交至GitHub远程仓库?

如何在保留文件修改时间的前提下提交本地变更到已有GitHub仓库

问题背景

已有一个GitHub仓库,本地工作目录存在文件变更但没有.git文件夹。需要提交这些变更,但直接克隆仓库后复制文件会修改文件的修改时间,希望避免这种情况。

最初尝试的操作及问题

执行了以下命令:

git init
git remote add origin https://...
git fetch origin
git add .
git status - shows all files as new
git diff origin/main - shows the correct changes I want to commit

随后执行提交:

git commit -m 'My first commit'

提交后本地分支变为master,git status无内容显示。后续推送到远程仓库时,会产生包含初始提交和实际提交的合并提交,提交历史显得杂乱。

问题原因

使用git init + git remote add + git fetch的方式会创建一个空的本地仓库,本地没有与远程main分支对应的本地分支。第一次提交会成为本地仓库的初始提交,与远程仓库的提交历史完全独立,因此后续推送到远程时需要合并两个独立的提交历史,导致多余的合并提交。

解决方案

变通方法(已验证可行)

  1. 在任意其他目录克隆远程仓库:
    git clone https://...
    
  2. 将克隆得到的.git目录复制到本地有变更的工作目录中
  3. 执行以下命令查看并提交变更:
    git add .
    git status
    

此时git status会正确显示本地文件的变更,后续可正常执行git commit和git push操作,且不会修改文件的修改时间。

更规范的命令行方法

无需复制.git目录,直接通过命令关联远程分支历史:

# 在本地工作目录初始化git仓库
git init
# 添加远程仓库地址
git remote add origin https://你的仓库地址.git
# 拉取远程main分支的提交历史,并创建对应的本地main分支
git fetch origin main:main
# 切换到本地main分支
git checkout main
# 将本地变更加入暂存区
git add .
# 确认变更正确
git status
# 提交变更
git commit -m "你的提交说明"
# 推送到远程仓库
git push origin main

这种方法同样能保留文件的修改时间,同时避免产生独立的初始提交,保证提交历史的整洁。

内容的提问来源于stack exchange,提问作者user109764

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:15:09