git - 从新本地 repo 到远程的Git"force push",但保持远程提交

  显示原文与译文双语对照的内容

我有一个工作的网站,我肯定有最新的,正确的每个文件的版本,没有被Git管理。 我还有一个面向该站点的,repo,但它有主要问题和out-of-date内容。

如果你想要的是实时文件,那么就把它们放到远程文件状态,这样最终的远程头状态就像我的活文件状态一样,,history 。

我想这样做,这样活的工作树就不会处于不同的状态。 我想创建一个新的分支,拉远程序,然后强制合并他们或者任何东西。

我还想把这些文件放下来,处理本地计算机上的所有冲突/合并,然后从那里推下来。 但这也是不可靠和危险的。

我知道我永远不应该像这样操作实际代码,但是这是我被丢弃的情况。

( 我相信这是一个重复的问题,但我的谷歌正在失败,请轻松地将我当前答案。)

时间:

尝试 git merge -s 。


git merge -s ours origin/remote_branch

它解决了任意数量的头,但结果树总是当前分支头,有效忽略所有它的他分支的更改。 它是用来取代旧分支发展历史的。

我认为这应该是简单的,通过一些操作 .git 目录。

创建测试设置


cd ~/Desktop/test/
mkdir outdated server
cd outdated && touch testfile1 testfile2 testfile3
git init && git add. && git commit -m"testfiles"
cd.. && git clone --bare outdated/cloud_hosted_repo

目前为止,我们有一个应该等同于一个 github repocloud_hosted_repooutdated 目录,应该把它等效为 github repo code ( 在developper机器上说)的本地副本,而 server 目录应该作为远程服务器的一个目录。

登录到服务器并在服务器上创建已经部署的项目


cd server && mkdir project_location some_other_location
cd project_location/&& touch testfile4 testfile5 testfile6 && cd.. 

如果这个项目位置已经是一个 git repo,那么移动. git 目录


mv project_location/.git project_location/.git.backup

将原始 repo 克隆到某个位置并清除它的文件


cd some_other_location/&& git clone.. /../cloud_hosted_repo/.
git rm"*" && git commit -m"removed all older files" && cd.. 

.git repo 中移动


mv some_other_location/.git/project_location/&& cd project_location/
git add. && git commit -m"Updated Project" && git push origin master

我们已经完成了。

git log 将显示分支中的所有提交。

你可以在任何需要的地方加入其他复杂的( 例如为备份创建额外分支) 。

...