我已经设置了一个远程非裸"主"仓库并将其克隆到我的电脑上.我做了一些本地更改,更新了我的本地存储库,并将更改推送回我的远程仓库.到目前为止,情况还不错.
现在,我不得不改变远程仓库中的东西.然后我在当地的回购中改变了一些东西.我意识到不需要改变远程仓库.所以我尝试git push从我的本地仓库到我的远程仓库,但我收到的错误如下:
为防止您丢失历史记录,拒绝非快进更新在再次推送之前合并远程更改.有关
git push --help详细信息,请参阅"关于快进的注意事项"部分.
我以为那可能是一个
git push --force
Run Code Online (Sandbox Code Playgroud)
将强制我的本地副本将更改推送到远程副本并使其相同.它确实强制更新,但当我回到远程仓库并进行提交时,我注意到文件包含过时的更改(主远程仓库以前有过).
[我]尝试强制,但当回到主服务器保存更改时,我得到过时的暂存.因此,当我提交存储库时不一样.当我再次尝试使用git push时,我得到了同样的错误.
我该如何解决这个问题?
我想推送我的本地文件,并将它们放在远程仓库上,而不必处理合并冲突.我只是希望我的本地版本优先于远程版本.
我怎么能用Git做到这一点?
当我使用我的源代码工作时,我做了我惯常的事情提交,然后我推送到远程存储库.但后来我注意到我忘了在源代码中组织我的导入.所以我做了修改命令来替换以前的提交:
> git commit --amend
Run Code Online (Sandbox Code Playgroud)
不幸的是,提交不能被推回到存储库.这被拒绝了:
> git push origin
To //my.remote.repo.com/stuff.git/
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to '//my.remote.repo.com/stuff.git/'
Run Code Online (Sandbox Code Playgroud)
我该怎么办?(我可以访问远程存储库.)
我知道,origin是远程存储库的术语,master是那里的分支.
我故意在这里省略"背景",我希望答案不应该依赖于背景.所以在git命令行中,origin/master和origin master之间有什么区别.是否有一种非模糊的方式来理解何时使用origin/master以及何时应该使用origin master?
我有一个存储库,它有一些不好的提交(本例中为D,E和F).
ABCDEF主和原点/主
我专门用一个修改了本地存储库git reset --hard.我在重置之前选了一个分支,所以现在我有一个看起来像的回购:
A-B-C master
\ D-E-F old_master
A-B-C-D-E-F origin/master
Run Code Online (Sandbox Code Playgroud)
现在我需要这些糟糕提交的一些部分,所以我选择了我需要的位并做了一些新的提交,所以现在我在本地有以下内容:
A-B-C-G-H master
\ D-E-F old_master
Run Code Online (Sandbox Code Playgroud)
现在我想把这种状态推到远程仓库.但是,当我尝试做一个git pushGit时,礼貌地给我刷掉了:
$ git push origin +master:master --force
Total 0 (delta 0), reused 0 (delta 0)
error: denying non-fast forward refs/heads/master (you should pull first)
To git@git.example.com:myrepo.git
! [remote rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@git.example.com:myrepo.git'
Run Code Online (Sandbox Code Playgroud)
如何让远程仓库获取本地仓库的当前状态?
我刚学会了git push --force-with-lease.这太棒了.但是,当然,我不经常使用武力,所以我担心下次需要时我可能会忘记这个漂亮的功能.
有没有办法配置git所以git push -f会自动使用,--force-with-lease除非我有意覆盖它--no-force-with-lease?
(我无法想象在没有租约的情况下想要使用武力!)
我们都听过一个人应该重订,从未发表的作品,它的危险,等等.但是,我还没有看到张贴如何处理的情况下衍合情况的任何食谱被出版.
现在,请注意,只有存储库仅由已知(并且最好是很小)的人群克隆,这才真正可行,这样无论谁推送rebase或重置,都可以通知其他人他们下次需要注意的时候取(!).
如果你没有本地提交foo并且它被重新定位,我看到的一个明显的解决方案将起作用:
git fetch
git checkout foo
git reset --hard origin/foo
Run Code Online (Sandbox Code Playgroud)
foo根据远程存储库,这将简单地抛弃本地状态以支持其历史记录.
但是,如果一个人在该分支机构进行了大量的本地更改,那么如何处理这种情况呢?
我有一个愚蠢的情况.我开发了一个由另一个开发人员开发的项目.我已将我的资源发送给之前的开发人员,以便对其来源进行更改.但他们说他们从未使用过git.所以他们已经添加了对项目的更改,现在是实际版本.但它不受版本控制代码的限制.
所以我已经在github上提交了我需要推送这个新版本.
我做了什么:
但这是一个问题,我当然不能在更新本地回购之前推动新的更改.但是,如果我更新我的仓库,它将返回先前开发人员已删除的所有文件.
我的问题:如何在不从git中提取数据的情况下推送当前版本.
我知道喜剧情况,但我需要帮助.
谢谢
git ×10
git-push ×2
git-amend ×1
git-commit ×1
git-rebase ×1
git-reset ×1
github ×1
push ×1
rebase ×1