当我 git push 所有文件都更新(甚至没有更改)时,我做错了啥?

Posted

技术标签:

【中文标题】当我 git push 所有文件都更新(甚至没有更改)时,我做错了啥?【英文标题】:When I git push all files are update (even not changed), what am I doing wrong?当我 git push 所有文件都更新(甚至没有更改)时,我做错了什么? 【发布时间】:2022-01-21 16:18:33 【问题描述】:

我是 git 的新手,我知道如何在一个项目上单身时推送更改,但现在我的情况是三个开发人员在一个项目上。 所以我有一个项目直接从存储库下载为 zip 文件(未克隆),然后我做了很多更改,我的同事也同时进行了一些更改,他推送了它们。 现在我需要拉他的更改,合并它们并推送,但最后我遇到了问题,当我推送文件(成功)时,所有文件都会更新,即使我没有触摸和更改。

这是我的步骤:

git init

然后我管理远程存储库:

git remote add origin <remote url>

并且可以检查它:

git remote -v

并接收:

> origin  <remote url> (fetch)
> origin  <remote url> (push)

然后我添加文件并提交更改:

git add .
git commit -m "Test"

然后我正在尝试从存储库中提取更改:

git pull origin master

并收到消息fatal: refusing to merge unrelated histories 并输入:

git pull origin master --allow-unrelated-histories

然后我有一条消息Please move or remove them before you merge。然后我删除它们并再次拉动:

git clean -f -d -x
git pull origin master

遇到一些合并冲突,我手动修复它们并再次添加文件并提交:

git add .
git commit -m "Merge conflicts Test"

最后我推送文件:

git push origin master

我看到的是所有文件都更新了两个变体(15 分钟前和 10 分钟前): push result of two commits

所以第一次提交(15 分钟)和第二次提交(10 分钟),但是为什么第一次提交会更新每个文件,这是因为我没有克隆存储库,对吗?如果是,我该如何解决?

【问题讨论】:

你能分享git refloggit log --oneline的输出吗? @taserface 在git reflog 我收到:3db9d5c (HEAD -&gt; master, origin/master) HEAD@0: commit (merge): merged 99c97ed HEAD@1: commit (initial): testgit log --oneline3db9d5c (HEAD -&gt; master, origin/master) merged 99c97ed test 9773d1c UPD: Updates to the Representatives Block bbb0744 FIX: CM - Updates for the Events/Tradeshows Block b1cc45e FIX: the Representatives Block ...(大约 30 行) 你应该按照@VonC 的建议去做,但要纠正你的错误,你可以从 master 中删除一个分支并删除所有提交并将分支重命名为 master,但首先你必须重命名 master分支。重命名分支后,您必须强制执行更改,以便主分支恢复到与提交推送之前相同的状态。然后你必须更新工作树。 非常感谢,伙计!现在我有很多东西要学习和测试。 【参考方案1】:

更安全的方法是克隆远程存储库,而不是在本地初始化并尝试推送。

克隆后,您可以导入您的工作(根据初始 zip 存档在本地完成,在另一个文件夹中进行了很多更改):

git config --global rebase.autostash true
git config --global pull.rebase true
git clone https://remote/url/reponame
cd reponame
git --work-tree=../otherfolder add .
git commit -m "Import my work"
git pull
# resolve conflict
git push

换句话说,将您的本地存储库放在一边(您在其中尝试了pull --allow-unrelated-histories,这不是一个好主意)。

并从官方克隆中做所有事情。

【讨论】:

以上是关于当我 git push 所有文件都更新(甚至没有更改)时,我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

git push 的解决方案

IEDA-Git的应用

gitlab push本地代码到gitlab上

为啥当我执行 git subtree push 时它说我拥有的文件不存在?

Git - 恢复文件 [重复]

svn与git的区别?