在进行分支合并时,我该怎么办才能避免对Git失去承诺



我最近与一个使用GitHub Enterprise的开发人员一起工作。

我在分支上工作,我们将其称为origin/feature1,持续了几个小时,并做了几项我有效推动的投入。同时,一位同事从origin/masterorigin/feature1合并。当他完成合并后,看来我最新的几项工作现在失踪了,自从我在注意到问题之前就拉了,我也在本地丢失了它们。

问题:

  • 是否可以真正失去被推动的承诺,或者所有东西都可以恢复(即使这意味着运行很多隐秘命令(?

  • 如果是的,这不是意味着Git以某种方式...破裂了吗?我的意思是,作为SVN的快乐用户,我从未失去过与SVN的任何工作。顺便说一句,也没有在2013年的TF。

  • 我在进行合并时就在这里。进行合并的人似乎没有做任何"特别",也没有执行任何命令,看起来他们可以丢掉一些命令。我认为这不是一个错误(Git客户端和GitHub Enterprise几乎是最新的(。那么,在合并时是否不应指定一些具体的论点?或者也许某些特定的合并模式默认情况下会导致损失?

本质上,如何避免将来失去半天的工作?

如果我们都开始在origin/feature1上工作,然后您首先推动一些提交,然后我尝试推动不同的投入,Git会给我一个错误,例如

! [rejected]        feature1 -> origin/feature1 (non-fast-forward)
error: failed to push some refs to 'https://your-repo.com'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

要正确处理这种情况,我可以运行git fetch origin以将您的推动提交到我的本地git中,然后将您的更改与mergerebase合并到我的更改中。

听起来在您的情况中发生的事情(正如其他人所阐明的那样(,是您的同事跑了git push --force,该公司告诉Git忽略了它第一次给出的错误,而我的feature1分支是我的origin/feature1。p>为了避免将来这些问题,我建议:

  • 主要在您自己的功能分支上工作,而不是在开发人员之间共享它们
  • 如果您知道恰好您在做什么,则仅使用-f--force标志。并确保将消息传达给团队的其他成员。可能会禁用将github的分支推向分支的力。

要取回更改,您可以运行git reflog,查找"提交"条目以找到您对主题的最后一个提交,然后 checkout相应的提交哈希。您的本地git至少要在30天内进行的每项提交,除非您删除.git目录,否则不可能丢失它。

可能您的同事在没有合并您的更改的情况下将他的分支推到了他的分支,因此,在该分支上,您的更改被"丢失"。您始终可以保留本地分支,以便您仍然可以做一些事情...如果您删除了本地分支,则可以随时检查回形框架以恢复旧提交。

您如何避免浪费时间?我想您(不是您,而是您,您的团队(应该学习如何在他们面前使用它们的工具。如果开发人员想玩牛仔(为了乐趣,或者可能对武力的后果无知(...好吧,请放轻松。暂时,尝试取回您的更改。

ps哦...不用担心。个人意见免责声明:经过几轮使用git并了解了它的工作原理,您会想知道如何通过使用SVN这么长时间就能完成。:d

同事在其本地存储库中进行合并。origin/feature1指的是其存储库中的一个远程分支,这与您推动的远程分支不同。git remote update将进行同步。

我怀疑涉及一些力量,您通常不想这样做。如果您的同事部队将origin/feature1推到CC_19,那么它将更改feature1点与您的提交的提交。

您的本地存储库可能仍然有您所做的承诺;找到它们超出了我的回答范围。

解决方案:

  • 确保在您的GitHub Enterprise上禁用强制推动
  • 确保没有人有任何默认配置,试图推动强制推动
  • 寻找您推动的孤儿犯罪;他们仍然应该在您的本地存储库中。

最新更新