当我 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 reflog
和git log --oneline
的输出吗?
@taserface 在git reflog
我收到:3db9d5c (HEAD -> master, origin/master) HEAD@0: commit (merge): merged 99c97ed HEAD@1: commit (initial): test
和git log --oneline
:3db9d5c (HEAD -> 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 所有文件都更新(甚至没有更改)时,我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章