git rebase吃了我的提交! 翻译一下'git reflog'输出给我?
我已经完成了五项投入,我想在推动它们之前将它们全部变成一个提交.由于某种原因,我决定尝试通过与通常使用不同的方式这样做. fwiw:我试图在此处遵循说明 http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html . 我会在下面放置很多细节,但您可能想跳到问题的底部,因为我怀疑这里是重要的. 所以这是我所做的 - 我所做的所有更改都做了: git rebase -i HEAD~5 我介绍了文本编辑器,该文本编辑器显示了提交,我错误地意识到,我将所有第一个列值更改为" squash". 我看到了一个错误消息.令我感到遗憾的是,我不记得错误消息说了什么,但我认为它说的是"您无权使用". 那时我回到了提示 git rebase -i HEAD~5 我收到消息: It seems that there is already a rebase-merge d
0 2023-11-18
编程技术问答社区
只恢复推送的单个文件的提交
下面是推动的历史. Commit Changed Files Commit 1| (File a, File b, File c) Commit 2| (File a, File b, File c) Commit 3| (File a, File b, File c) Commit 4| (File a, File b, File c) Commit 5| (File a, File b, File c) 我想恢复文件b commit 3 . 的更改. 但是...我想保留该文件中发生的更改4和5. 解决方案 在git中,每个提交都保存A snapshot - 也就是说,每个 的状态 file- rather比一组更改. 但是,每个提交都 - 几乎每个提交都有一个 parent (上一个)commit.如果您询问git,例如, commit a123456?中发生了什么,git是什么,找到a123456的 parent ,提取 >快照,
12 2023-11-18
编程技术问答社区
git reset --hard origin/master是什么意思?
我做了git pull并有错误: 以下工作树文件将被合并覆盖... 请在合并之前移动或删除它们. 解决这个问题,我做了以下内容: git fetch git reset --hard origin/master 现在,当我做git pull时,它说了所有内容.我想知道运行这些命令时到底会发生什么.我知道git fetch从远程存储库中获取更改而不将其合并到我的本地仓库中. git reset --hard origin/master的含义是什么?它如何工作? 解决方案 git reset --hard origin/master 说:扔掉我所有的上演和未分段的变化,忘记我当前的本地分支上的所有内容,使其与origin/master完全相同. 您可能想在运行命令之前问这个.通过使用与"硬重置"中相同的单词来暗示破坏性的性质. 其他解决方案 在较新版本的Git(2.23+)中,您可以使用: git switch --force-cr
18 2023-11-18
编程技术问答社区
撤销已经推送到远程仓库的Git中的特定提交
撤消特定提交的最简单方法是: 不在头或头部 已将其推到遥控器. 因为如果不是最新的提交, git reset HEAD 不起作用.而且由于已将其推到遥控器 git rebase -i 和 git rebase --onto 将在遥控器中引起一些问题. 更重要的是,我不想真正修改历史记录.如果有糟糕的代码,那就在历史上,可以看到.我只想在工作副本中弄清楚,我不介意反向合并提交. 换句话说,什么是 git 等于以下SVN命令: svn merge -r 303:295 http://svn.example.com/repos/calc/trunk 通过将这些修订中的所有更改逆转来删除从295到302的所有变化,作为新提交. svn merge -c -302 ^/trunk 撤消了302提交的 ,当然是通过添加另一个将更改从相应提交的变更合并的提交. 我认为这应该是GIT中相当简单的操作,并且是一个相当常见的
2 2023-11-18
编程技术问答社区
我如何撤销git reset --hard HEAD~1?
是否可以撤消以下命令引起的更改?如果是这样,如何? git reset --hard HEAD~1 解决方案 pat notz是正确的.只要在几天之内,您就可以收回提交.除非您明确告诉它去除新的斑点,否则只有大约一个月左右的垃圾收集. $ git init Initialized empty Git repository in .git/ $ echo "testing reset" > file1 $ git add file1 $ git commit -m 'added file1' Created initial commit 1a75c1d: added file1 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file1 $ echo "added new file" > file2 $ git add file2 $ git commit -m 'added
6 2023-11-18
编程技术问答社区
重置后,我所有未被追踪的文件都消失了。
我在没有提交文件的情况下进行了git硬重置.解雇重置后,我检查了所有未跟踪的文件都消失了.我希望它只会影响我们在提交期间所做的更改,它将仅重置这些更改.但是我错了. 有什么方法可以恢复我所有未跟踪的文件?任何帮助真的将不胜感激. 谢谢 解决方案 如果您以前使用未跟踪的文件进行git add,则git reset --hard将删除它们. GIT没有恢复这些的过程,因为它们没有跟踪.您将需要找到另一个工具,例如操作系统或IDE. Intellij具有"本地历史"工具,您可能可以利用它来还原这些文件. 供将来参考,更喜欢git stash而不是git reset --hard. git stash创建一个临时的"储藏"提交您的更改.这些可以通过git stash apply或git stash pop轻松检索.当您使用git reset --hard核核目录时,很难撤消,有时甚至是不可能的.
4 2023-11-02
编程技术问答社区
在没有任何提交的情况下撤销 git 重置
我最近想在远程git存储库上更新我的代码.我还没有意识到它什至还没有承诺.我确实创建了一些错误,所以我想将分支重置为以前的状态. 您可能希望,我使用了git reset --hard. 好吧,从那以后,一切(整个项目)已经消失了.当然,.gitignore文件/文件夹除外.我一直在想,有什么办法可以撤消吗? 我唯一做的步骤: git add . # Here I realized there is a bug in what I did # I thought myself it would be better to undo that as it wasn't even something needed git reset --hard 另外,我想指出的是,这里可能不是任何问题的重复,因为其他人以前曾做过一些提交.这是全新的存储库,并且已经"重置很难". 解决方案 您可以在添加的状态上复活文件,但没有它们的文件名.使用git fsck您将获得任何提
38 2023-08-21
编程技术问答社区
什么是`git restore`命令,`git restore`和`git reset`之间有什么区别?
当我想解开分阶段文件时,我所有的git教程都显示出: $ git add * $ git status On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) renamed: README.md -> README modified: CONTRIBUTING.md 这个提示告诉我们使用git reset进行分阶段的文件. 但是,在我的终端中,我看到: git status On branch master Changes to be committed: (use "git restore --staged ..." to unstage) renamed: cat.js -> catcat.js renamed: tolendo.gogo -> tolendo.txt
22 2023-08-10
编程技术问答社区
如何git重置-hard子目录
更新²:使用GIT 2.23(2019年8月),有一个新命令git restore可以做到这一点,请参见接受答案. update :从Git 1.8.3开始,这将更直观地工作,请参见我自己的答案. 想象以下用例:我想摆脱我git工作树的特定子目录中的所有更改,使所有其他子目录完整. 我可以做git checkout .,但是 有git reset --hard,但是它不会让我为子目录: > git reset --hard . fatal: Cannot do hard reset with paths. 再次:为什么git不能硬/软/软通过路径重置? 我可以使用git diff subdir | patch -p1 -R对当前状态进行反向绘制,但这是一种相当奇怪的方法. 此操作的适当git命令是什么? 下面的脚本说明了问题.在How to make files注释下方插入适当的命令 - 当前命令将还原文件a/c/ac,该文件应被稀疏结帐所
6 2023-08-08
编程技术问答社区
移除别人在我的分支上的提交,在rebase出错后。
我在这里陷入了一些git-funk.我需要从中git fu. 我加入了一个新团队并创建了一个功能分支: git checkout -b feature_branch 进行了一些更改,然后将它们推到分支. git commit -am "Changes" git push origin feature_branch 有人在我的PR上留下了评论,所以我进行了更改,然后检查了掌握和重新重新分支,然后再次提交/推到该分支: // from feature_branch make some changes git commit -am "New changes" git checkout master git checkout feature_branch git rebase origin/master git push feature_branch 一旦我这样做,我注意到我的PR(在Github上)捡起了Elses的承诺.然后,我被告知,这个新团队中的典型
14 2023-08-02
编程技术问答社区
如何一针见血地压扁/还原
我如何在最低限度的努力下,将我所有的承诺(即使合并和冲突解决方案) 在功能分支上,然后在分支的顶部重新置于我开始开发的分支机构上从? 不想重做已经完成的冲突解决方案.将麻烦减少到最低. 假设我们正在谈论的分支是Master和Featurx. 解决方案 我知道的最简单方法是 git checkout featureX git merge -m "Bring latest changes from master" master # magic starts here git reset --soft master # put featureX branch pointer on top of master tip # at this point all the changes related to featureX are on staging area git commit -m "Feature X in a single shot" 你去.没有重新打击,没有挤压
10 2023-08-02
编程技术问答社区
在有人向已发布的分支推送rebase或重置后,我如何恢复/重新同步?
我们都听说过,人们永远不应该重新出版的作品,这很危险等.但是,我还没有看到任何有关如何处理这种情况的食谱,以防rebase 发表. 现在,请注意,只有在存储库仅由已知(和最好的)人群克隆时,这才是真正可行的下次他们获取(!). 如果您在foo上没有本地提交,它将被重新构成: ,我看到的一个明显的解决方案将有效 git fetch git checkout foo git reset --hard origin/foo 这只会根据远程存储库来抛弃foo的本地状态. 但是,如果一个人对该分支机构进行了重大的本地变更,则如何处理这种情况? 解决方案 在大多数情况下,在推动重现后重新恢复同步并不那么复杂. git checkout foo git branch old-foo origin/foo # BEFORE fetching!! git fetch git rebase --onto origin/foo old-foo foo git branc
8 2023-08-02
编程技术问答社区
本地硬重置后推送到原点的问题
我最近对本地git存储库进行了艰难的重置:换句话说,我将其重置为更早的时间点.现在,当我尝试向上推到origin时,它告诉我不能,因为origin包含以后日期的工作,而不是我的存储库.这是有道理的,但我不在乎原始本地存储库之后的工作. 如果我第一次pull,那是我被告知要做的,我认为我的本地HEAD将成为origin HEAD的一切毫无疑问. 我应该如何继续这里?回顾一下,我不在乎以后在原点上的其他工作,但请关心硬重置后的本地完成的额外工作. 我开始认为硬重置不是一个好主意. 解决方案 您可以push --force覆盖origin的当前HEAD,即使您的本地分支不是它的后代. 但是:您应该意识到后果:其他在同一存储库上工作的开发人员现在无法轻松地进行更改,而必须重置/重新启动到原点.使用强制推送/重写的推送历史记录是 bad ,应尽可能避免. 在Stackoverflow上另请参阅另一个答案,内容涉及强制推动的危险:如何正确强行git推动?/p>
18 2023-06-18
编程技术问答社区
在git重置后,未到达的提交没有被删除
我有一个很小的回购,有几个提交: * a0fc4f8 (HEAD -> testbranch) added file.txt * e6e6a8b (master) hello world now * f308f53 Made it echo * f705657 Added hello * 08a2de3 (tag: initial) initial 也: $ git status On branch testbranch nothing to commit, working directory clean 我无法理解以下行为.在这种状态下,我运行: $ git reset initial 我现在看到: * e6e6a8b (master) hello world now * f308f53 Made it echo * f705657 Added hello * 08a2de3 (HEAD -> testbranch
16 2023-04-22
编程技术问答社区
在我用git reset转到一个较早的变更集之后,如何回到历史上的最后一次提交?
假设我的历史记录下来: a -b -c -d(master) 如果我做git reset B,我会得到: a -b(master) 麻烦是,git log现在仅向我展示从A到B的历史记录,我再也看不到C和D. 我该如何回到D? 解决方案 您应该能够与 git reflog . 请参阅此 a>. 实际上唯一删除的时间是如果您git gc -prune(请小心那个!). 如果您现在在您一直在工作的存储库中运行Git Reflog,您会看到很多看起来像这样的更改: c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive. 49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD 3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursi
18 2023-04-22
编程技术问答社区
如何取消一个本地的git提交?
我的问题是我已经更改了一个文件,例如:readme,为我的测试行添加了一个新行'''并保存了文件,然后我发布了以下命令: git status # On branch master # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: README # no changes added to commit (use "git add" and/or "git commit -a") git add README git commit -a -m 'To add new line to readme' 我没有将代码推向github.现在我想取消此提交.
20 2023-04-22
编程技术问答社区
不使用git-stash,如何保存正在进行的工作?
我有一个以这种情况的git目录: ProgSoul@PROGSOUL-LENOVO:~/esercizio3_2$ git status Sul branch master Changes to be committed: (use "git reset HEAD ..." to unstage) modified: A Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: A Untracked files: (use "git add ..." to include in what will be co
28 2023-04-22
编程技术问答社区
我如何恢复未提交的修改,包括文件和文件夹?
是否有一个git命令可以恢复工作树和索引中的所有未投入更改,还可以删除新创建的文件和文件夹? 解决方案 您可以运行这两个命令: # Revert changes to modified files. git reset --hard # Remove all untracked files and directories. # '-f' is force, '-d' is remove directories. git clean -fd 其他解决方案 如果您只想在当前工作目录中恢复更改,请使用 git checkout -- . 在此之前,您可以列出将不实际采取任何操作的文件,只是检查将会发生的事情, git checkout -- 其他解决方案 使用" Git Checkout- ..."丢弃工作目录的更改 git checkout -- app/views/posts/index.html.erb 或 git checko
26 2023-04-22
编程技术问答社区
为什么在Git中有两种方法来解除文件的缓存?
有时git建议git rm --cached解开文件,有时git reset HEAD file.我什么时候应该使用哪个? 编辑: D:\code\gt2>git init Initialized empty Git repository in D:/code/gt2/.git/ D:\code\gt2>touch a D:\code\gt2>git status # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # a nothing added to commit but untracked files present (use "git add" to track) D:\code\gt2>git add a D:\code\gt2>git stat
28 2023-04-22
编程技术问答社区
如何从一个分支中删除一个提交?
如何从分支历史记录中删除提交? 我应该使用git reset --hard HEAD? 解决方案 小心: git reset --hard 将删除您的工作目录更改.请确保在运行此命令之前要保留您要保留的任何本地更改. . 假设您坐在该提交上,则此命令将瓦解... git reset --hard HEAD~1 HEAD~1是指头之前的提交. 或者,您可以查看git log的输出,找到要备份的提交的提交ID,然后执行此操作: git reset --hard 如果您已经推动了它,则需要竭尽全力摆脱它... git push origin HEAD --force 但是,如果其他人可能已经拉了它,那么您最好开始一个新的分支.因为当他们拉动时,它只会将其合并到他们的工作中,您将再次将其推回去. 如果您已经推了,最好使用git revert,创建一个"镜像映像"提交,以消除更改.但是,两个提交都将在日志中
24 2023-04-22
编程技术问答社区