Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Git覆盖master并保留历史记录

Git覆盖master并保留历史记录
EN

Stack Overflow用户
提问于 2020-01-02 19:50:58
回答 1查看 341关注 0票数 0

我想覆盖主分支并保留文件的历史记录。

我有一个生成代码的API。每次为API生成代码时,我都想覆盖主分支,并从远程主分支中删除本地没有的任何文件。我在本地拥有的文件,我想在推送它们后跟踪它们的历史记录。

我使用了git push --set-upstream origin master -f,这删除了所有文件的历史记录。

EN

回答 1

Stack Overflow用户

发布于 2020-01-02 22:51:40

以下是几个选项:

git reset

你可以标记你当前的HEAD,一旦它被标记,你就可以恢复之前的任何提交,因为git将保留完整的历史记录

git checkout <backup branch>

将当前分支历史记录备份到新分支中

“撤消”给定的提交或提交范围。

reset命令将“撤消”在给定提交中所做的任何更改。

带有撤消补丁的新提交将被提交,而原始提交也将保留在历史中。

代码语言:javascript
运行
AI代码解释
复制
# add new commit with the undoing of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>

完整的答案:选择一个适合你的选择-我还添加了一些额外的信息,这样你就可以有完整的图片

在回答之前,让我们添加一些背景知识,解释一下这是什么HEAD

First of all what is HEAD?

HEAD只是对当前分支上的当前提交(最新)的引用。

在任何给定时间只能有一个HEAD。(不包括git worktree)

HEAD的内容存储在.git/HEAD中,它包含当前提交的40个字节的SHA-1。

detached HEAD

如果您没有执行最近一次提交-意味着HEAD指向历史上的前一次提交,那么它被称为detached HEAD.

在命令行上,它将类似于- SHA-1而不是分支名称,因为HEAD没有指向当前分支的顶端

关于如何从分离的头部恢复的几个选项-或者在您的情况下如何在git中保留历史记录( in git)。

git checkout

代码语言:javascript
运行
AI代码解释
复制
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

这将签出指向所需提交的新分支。

此命令将签出到给定的提交。

此时,您可以创建一个分支并从此点开始工作。

代码语言:javascript
运行
AI代码解释
复制
# Checkout a given commit. 
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>

# create a new branch forked to the given commit
git checkout -b <branch name>

git reflog

您也可以随时使用reflog

git reflog将显示更新了HEAD的任何更改,并且检出所需的reflog条目会将HEAD设置回此提交。

每次修改reflog头时, HEAD中都会有一个新条目

代码语言:javascript
运行
AI代码解释
复制
git reflog
git checkout HEAD@{...}

这将使您返回到所需的提交

“移动”你的头回到你想要的提交。

代码语言:javascript
运行
AI代码解释
复制
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.

您也可以使用git rebase --no-autostash

“撤消”给定的提交或提交范围。

reset命令将“撤消”在给定提交中所做的任何更改。

带有撤消补丁的新提交将被提交,而原始提交也将保留在历史中。

代码语言:javascript
运行
AI代码解释
复制
# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>

这个模式说明了哪个命令做了什么。

如您所见,reset && checkout修改HEAD

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59569188

复制
相关文章
git 合并两个仓库,并保留历史记录
问题 repo1 repo2是两个无关联的仓库,需要合并并保留两者的提交历史 git checkout repo1 repo1/master git checkout repo2 repo2/master git merge repo1 直接尝试合并时会报错 fatal: refusing to merge unrelated histories 解决步骤 使用参数–allow-unrelated-histories合并 git merge repo1 --allow-unrelated-hist
路过君
2023/02/10
6330
2018-07-20 如何将 SVN 迁移至 GIT 并保留所有历史记录
原文地址: http://pcme.info/blog/2013/09/06/how-to-migration-svn-to-git/
Albert陈凯
2018/07/24
1.4K0
git 回滚代码并保留提交历史
在使用git时,有时候需要回退最新代码到之前的某次提交或某个tag,将中间的所有代码提交去掉。同时保持中间的提交记录。实际应用时发现这个动作没有比较好的实现方式。
王云峰
2023/10/23
3330
撤销 git add . 并保留修改的方法
执行完 git add . 才发现没有在对应的分支,如何撤回呢? 可以参考下面的方法: 文件退出暂存区,但是修改保留: git reset --mixed 撤销所有的已经 add 的文件: git reset HEAD . 撤销某个文件或文件夹: git reset HEAD  -filename 另外:可以用 git status Git 会告诉你可以通过那个命令来执行操作。 未经允许不得转载:w3h5 » 撤销 git add . 并保留修改的方法
德顺
2022/01/12
33.9K0
git --- ! [rejected] master -> master (non-fast-forward)
3.出现错误的主要原因是github中的README.md文件不在本地代码目录中
小蔚
2019/09/12
3.9K0
git ---  ! [rejected]        master -> master (non-fast-forward)
解决Git - git push origin master 报错
重新输入git push -f 或者 git pull --rebase origin master 
达达前端
2022/04/29
3340
解决Git - git push origin master 报错
git强制覆盖本地代码
在使用Git时,当merge失败push不上时,通常需要让本地代码恢复成上一次提交到仓库的内容。
用户2323866
2021/06/24
1.6K0
记一次保留订单历史记录的方案讨论
假设一条记录包含以下信息:(id,username,score,version),score每次变更,version就加1,对于username相同的数据,只有version最大的那一条是有效的,也就是Mysql按字段分组取最大值记录问题,怎么做才能使查询效率高呢
明明如月学长
2021/08/31
2870
记一次保留订单历史记录的方案讨论
【Git】新分支替换 Master 分支
最近在公司里面在做一个 Web 项目的框架升级,由于改动比较大,与 Master 的代码差异比较大。我们在保证新分支的功能稳定的前提下,完全可以用新分支替换 Master 分支。公司使用的是基于 GitLab 开发的一套代码管理平台。
redszhao
2021/08/09
3.2K0
【Git】新分支替换 Master 分支
git强制覆盖本地代码
git fetch --all && git reset --hard origin/master && git pull
用户6421725
2019/12/02
1.9K0
git push 报错处理 ! [rejected] master -> master (non-fast-forward)
4.添加远程仓库位置:git remote add origin git@gitee.com:chenjiangtao/my-springboot-sample.git
全栈程序员站长
2021/05/19
1.6K0
git上传中 :! [rejected] master -> master (fetch first)问题的解决方案
分析原因,基本上可以确定是因为github上的远程库与本地库版本不一致(我对github上的文件做了编辑操作,且未更新到本地,当然也可能还有其他原因…),通过一番研究,找到了两种解决方案:
江一铭
2022/06/16
7210
git上传中  :! [rejected] master -> master (fetch first)问题的解决方案
Git - git push origin master 报错的解决方法
git push origin master 报错的解决方法 错误提示如下 123456789 [root@linux1 php]# git push -u origin master To git@github.com:kangvcar/Results-Systems--PHP.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'git@github.com:kangv
KangVcar
2018/07/06
8350
git: 简洁高效 的 双分支式 git flow (master + dev)
使用 git branch (git 分支)进行版本控制,可以让大家有效地合作,使得项目井井有条地发展下去。
JNingWei
2018/09/27
1.9K0
git: 简洁高效 的 双分支式 git flow (master + dev)
Git 如何 clone 非 master 分支的代码
默认 clone 的是这个仓库的 master 分支。如果最新的代码不在 master 分支上,该如何拿到呢?如下图所示,最新的代码可能在daily/1.4.1分支上,我们希望拿到这个分支上的代码。
零式的天空
2022/03/28
4200
Git 如何 clone 非 master 分支的代码
Merge vs Rebase
git rebase命令经常被认为是Git巫术,初学者应该远离它,但它实际上可以让开发团队在使用时更加轻松。在本文中,我们将git rebase与相关git merge命令进行比较。
银河1号
2019/04/12
1.7K0
Merge vs Rebase
git禁止在master分支push和commit
作为管理者,在远端将master分支设为保护分支,可以从根源上杜绝直接推送到master的问题。dev分支同理。
职场亮哥
2020/10/10
6.6K0
svn 项目迁移到 git 保留 commit 记录
最近迁移了两个 SVN 项目到 Gitlab 上,唯一的目的就是想把提交记录保存下来,至于谁提交的无所谓,只希望能在看不懂一些代码的时候能追溯回去看看当时为什么这样修改。随后查看了很多资料,初试的时候遇到了很多问题,最终使用如下命令完美解决:
我与梦想有个约会
2018/12/12
7730
git 主干master分支回滚到历史版本
-- 本地分支回滚到指定版本 git reset --hard <commit ID号>
五月
2022/11/15
1.3K0
动图学CS: 有用的 Git 命令(上)
尽管 Git 是一个非常强大的工具,但是我相信大部分同学有时候学起 Git 来,感觉很难搞~ 笔者总是习惯于在脑海中重现学习的知识,Git 也一样:当我们执行了切换分支命令,分支之间是如何交互的?又是如何影响历史提交的?当我在 master 分支上执行了强制 reset 又 force push 到了远端 ,又把 .git 文件夹删掉,我的同事为什么会哭??
savokiss
2020/05/08
1K0
动图学CS: 有用的 Git 命令(上)

相似问题

git:清除git历史记录,只在master中保留合并的提交

23

在保留历史记录的同时覆盖git分支

14

在git上重命名文件并保留历史记录

25

合并两个Git repos并保留历史记录

34

Git:合并master到新的分支,并清除master

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档