【问题标题】:Git merge & Pull code and Local Changes LostGit 合并和拉取代码以及丢失的本地更改
【发布时间】:2023-03-13 21:54:02
【问题描述】:

在这里,我正在编写提交代码所遵循的 git 命令。

git merge <branch1> --no-commit

所以我从那个分支获得了代码并开始着手处理它。我确实只将代码合并到 master 中。现在,在我完成我的代码并尝试从 master 那里获取更改后,其他人也在处理它。

git pull origin master

我收到错误说 MERGE_HEAD 存在,请提交您的文件。所以我确实通过输入这些命令来提交代码。

git add .
git commit -m "<commit message>"

现在我尝试像往常一样通过 rebase 来提取代码。

git pull origin master --rebase

现在一切都很好,提交看起来也不错。所以我去了代码库并检查了文件。我所有的改变都消失了。我哪里做错了??我还是不知道。请帮我找出问题所在。提前谢谢你。

【问题讨论】:

  • 你能在git reflog找到你的变化吗?
  • 你必须在合并你的分支之前拉取。您还需要在合并之前重新设置基准。您收到此错误消息是因为您正在尝试合并具有不同历史记录的两个分支
  • “现在一切都很好,提交看起来也很好。所以我去了代码库并检查了文件。我所有的更改都消失了” - 你能解释更多吗? “提交看起来不错”是什么意思 - 你看到你的变化了吗?那么,什么是“代码库”,你看不到变化?
  • @max360 在我尝试从 master 中提取更改之前,我确实进行了所有这些更改。但是在拉取代码之后,现在它已经消失了。
  • @choroba f3b1eb4 HEAD@{11}: commit (merge): 是我发现至少相关的。但是我不知道如何看到这些变化。

标签: git git-branch branching-and-merging git-pull


【解决方案1】:

以下是将您的更改从您的分支带到 master 的步骤:

git checkout master

这是您要推送更改的分支

git pull origin master 

检索团队的提交

git checkout your-branch

检索你的分支

git rebase master

检索 master 的所有提交,然后放入您的更改

git checkout -b your-branch.1

您不能将提交推送到您的分支,因为您的远程与本地分支不同,因为 rebase 会重写历史记录

git push origin your-branch.1

推送你准备合并的分支

git checkout master

那是你要合并的分支

git merge --no-commit --squash your-branch.1

将您的分支与 master 合并。 Squash 会将您的所有提交合二为一。没有提交会让你写出漂亮的提交信息

git commit -m "here is my commit message"

善意地告诉你的团队成员你的变化是什么

git push

发布您的更改

【讨论】:

  • 因此您正在为这些新更改创建一个新分支。为什么??我已经有了我的分支。那么我为什么要创建一个新的分支呢?你能解释一下吗?
  • 使用 master 重新定位您的分支将更改提交历史记录:您将获得 master + yours 的所有提交。但是这些更改仅适用于您的本地 git 分支,因此您的远程分支将获得不同的历史记录,因此 git 不允许您推送本地分支。这就是为什么你必须创建一个新分支(.1 只是为了提供一个线索,即相同的分支但“更新”版本)
【解决方案2】:
git merge <branch1> --no-commit

所以我从那个分支获得了代码并开始着手处理它。

这不是一个答案,但在这里你似乎做错了。通过不提交,您将您的开发更改与先前的合并混合在一起。这可能会扰乱进一步的历史分析。

【讨论】:

  • 我错误地理解了 --no-commit 的含义。所以我确实喜欢并开始编码。但是当我在合并之前更改代码时也没有问题。所以我继续说。现在我的代码不见了,又开始了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多