如何强制覆盖本地文件git pull?
方案如下:
这是我得到的错误:
错误:未经跟踪的工作树文件'public/images/icon.gif'将被合并覆盖
如何强制Git覆盖它们?这个人是设计师 - 通常我会手动解决所有冲突,因此服务器具有他们只需要在他们的计算机上更新的最新版本.
如何将本地分支重置为远程存储库中的分支?
我做了:
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
但当我跑一个git status,
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: java/com/mycompany/TestContacts.java
modified: java/com/mycompany/TestParser.java
Run Code Online (Sandbox Code Playgroud)
你能告诉我为什么我有这些'修改'?我没有碰过这些文件?如果我这样做,我想删除它们.
我已经设置了一个远程非裸"主"仓库并将其克隆到我的电脑上.我做了一些本地更改,更新了我的本地存储库,并将更改推送回我的远程仓库.到目前为止,情况还不错.
现在,我不得不改变远程仓库中的东西.然后我在当地的回购中改变了一些东西.我意识到不需要改变远程仓库.所以我尝试git push从我的本地仓库到我的远程仓库,但我收到的错误如下:
为防止您丢失历史记录,拒绝非快进更新在再次推送之前合并远程更改.有关
git push --help详细信息,请参阅"关于快进的注意事项"部分.
我以为那可能是一个
git push --force
Run Code Online (Sandbox Code Playgroud)
将强制我的本地副本将更改推送到远程副本并使其相同.它确实强制更新,但当我回到远程仓库并进行提交时,我注意到文件包含过时的更改(主远程仓库以前有过).
[我]尝试强制,但当回到主服务器保存更改时,我得到过时的暂存.因此,当我提交存储库时不一样.当我再次尝试使用git push时,我得到了同样的错误.
我该如何解决这个问题?
有时候,尤其是 当我是唯一一个在远程存储库上工作的人时,我喜欢用git rebase -i和重写历史git push origin master -f.
如何在git pull origin master没有合并的情况下强制执行?我尝试了-f选项,但是没有用.我只想重写我本地git仓库的历史记录以匹配远程(原点)的历史记录.
假设我从git repo中提取更改.然后,回购力量的作者推向中央回购.现在我不能拉,因为历史被重写了.
假设作者强行推送正确版本,我怎样才能提取新提交(并放弃旧提交)?
我知道这是糟糕的git工作流程,但有时你无法避免这种情况.
我读到了有关如何修改提交消息的内容.接受的答案是:
如果您已经将提交推送到远程分支,那么您需要强制推送提交
git push <remote> <branch> --force.
这是我的理解(也来自已接受的答案)git push --force将覆盖远程分支上的所有数据与本地数据.
为什么在更改提交消息后强制推送是必要的?如果我修改提交消息并试图在没有-f或者推送的情况下会发生什么--force?
在强制推送或强制更新之后,通常使用硬git reset来复制分支的所有远程更改。例如在 rebase 和 force push 之后
git push --force origin my_branch
Run Code Online (Sandbox Code Playgroud)
您的团队成员可以使用
git reset --hard origin/my_branch
Run Code Online (Sandbox Code Playgroud)
获取更新的分支。现在的问题是,为什么你必须指定一个斜线/的git reset,但不适合git push?