如何正确进行 git merge/pull:您尚未完成合并(MERGE_HEAD 存在)
我是 Git 的新手,无法理解如何使用 Git。我一直在使用 CVS,所以经历了一些 Git 的学习曲线。这是我尝试过的所有内容
现在我只更改了两个文件 PromoServiceImpl.java 和 build.sql。然而,合并“产品”分支时遇到麻烦。
您看到的其余文件(如 ApiServiceImpl.java 等)是其他用户的更改,但我不确定此处的表示是否表明我已更改它们。可能它在早期的拉取命令中被合并了,现在它希望我提交它们?
无论我遵循的命令流程是什么(即使经过一些 Google 搜索),我都会看到以下错误:
您尚未完成合并(MERGE_HEAD 存在) 请先提交更改,然后才能合并。
这是我遵循和输出的命令序列(试图通过插入新行以供每个人阅读来使其美观)。即使在重新从存储库中进行更改后,此错误也会出现,所以我确信我做错了什么而不是 git 的问题。
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: TryGitServices/src/main/java/com/TryGit/services/promo/impl/PromoServiceImpl.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
no changes added to commit (use "git add" and/or "git commit -a")
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
From ssh://192.168.2.251/TryGit
* branch product -> FETCH_HEAD
Auto-merging TryGitResources/build/build.sql
CONFLICT (content): Merge conflict in TryGitResources/build/build.sql
Automatic merge failed; fix conflicts and then commit the result.
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Changes to be committed:
#
# modified: TryGitCore/src/main/java/com/TryGit/core/api/binding.xml
# modified: TryGitServices/src/main/java/com/TryGit/services/api/impl/ApiServiceImpl.java
# modified: TryGitServices/src/main/java/com/TryGit/services/common/impl/StartupServiceImpl.java
# modified: TryGitWeb/src/main/webapp/WEB-INF/wsdl/TryGit.wsdl
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/homeDeal.css
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/TryGit.css
# modified: TryGitWeb/src/main/webapp/static/img/TryGit/sprite/TryGit.png
# modified: TryGitWeb/src/main/webapp/views/admin/createPromoCode.jsp
# modified: TryGitWeb/src/main/webapp/views/admin/product/productAdmin.jsp
# modified: TryGitWeb/src/main/webapp/views/deal/homePage.jsp
#
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: TryGitResources/build/build.sql
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: TryGitServices/src/main/java/com/TryGit/services/promo/impl/PromoServiceImpl.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ git reset TryGitResources/build/build.sql
Unstaged changes after reset:
M TryGitResources/build/build.sql
M TryGitServices/src/main/java/com/TryGit/services/promo/impl/PromoServiceImpl.java
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Changes to be committed:
#
# modified: TryGitCore/src/main/java/com/TryGit/core/api/binding.xml
# modified: TryGitResources/build/build.sql
# modified: TryGitServices/src/main/java/com/TryGit/services/api/impl/ApiServiceImpl.java
# modified: TryGitServices/src/main/java/com/TryGit/services/common/impl/StartupServiceImpl.java
# modified: TryGitWeb/src/main/webapp/WEB-INF/wsdl/TryGit.wsdl
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/homeDeal.css
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/TryGit.css
# modified: TryGitWeb/src/main/webapp/static/img/TryGit/sprite/TryGit.png
# modified: TryGitWeb/src/main/webapp/views/admin/createPromoCode.jsp
# modified: TryGitWeb/src/main/webapp/views/admin/product/productAdmin.jsp
# modified: TryGitWeb/src/main/webapp/views/deal/homePage.jsp
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: TryGitResources/build/build.sql
# modified: TryGitServices/src/main/java/com/TryGit/services/promo/impl/PromoServiceImpl.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ git stash
Saved working directory and index state WIP on product: b8bb080 changing build.sql for RBT task
HEAD is now at b8bb080 changing build.sql for RBT task
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
nothing added to commit but untracked files present (use "git add" to track)
kamal@kamal-Lenovo-G470:~/git/TryGit$ git reset Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ git reset Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
nothing added to commit but untracked files present (use "git add" to track)
kamal@kamal-Lenovo-G470:~/git/TryGit$ git rm Adding
fatal: pathspec 'Adding' did not match any files
kamal@kamal-Lenovo-G470:~/git/TryGit$ man git rm
kamal@kamal-Lenovo-G470:~/git/TryGit$ git rm Adding
fatal: pathspec 'Adding' did not match any files
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
nothing added to commit but untracked files present (use "git add" to track)
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
remote: Counting objects: 566, done.
remote: Compressing objects: 100% (316/316), done.
remote: Total 386 (delta 207), reused 0 (delta 0)
Receiving objects: 100% (386/386), 203.81 KiB, done.
Resolving deltas: 100% (207/207), completed with 56 local objects.
From ssh://192.168.2.251/TryGit
* branch product -> FETCH_HEAD
Auto-merging TryGitResources/build/build.sql
CONFLICT (content): Merge conflict in TryGitResources/build/build.sql
Automatic merge failed; fix conflicts and then commit the result.
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
M TryGitCore/src/main/java/com/TryGit/core/api/binding.xml
U TryGitResources/build/build.sql
M TryGitServices/src/main/java/com/TryGit/services/api/impl/ApiServiceImpl.java
M TryGitServices/src/main/java/com/TryGit/services/common/impl/StartupServiceImpl.java
M TryGitWeb/src/main/webapp/WEB-INF/wsdl/TryGit.wsdl
M TryGitWeb/src/main/webapp/static/css/TryGit/homeDeal.css
M TryGitWeb/src/main/webapp/static/css/TryGit/TryGit.css
M TryGitWeb/src/main/webapp/static/img/TryGit/sprite/TryGit.png
M TryGitWeb/src/main/webapp/views/admin/createPromoCode.jsp
M TryGitWeb/src/main/webapp/views/admin/product/productAdmin.jsp
M TryGitWeb/src/main/webapp/views/deal/homePage.jsp
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
kamal@kamal-Lenovo-G470:~/git/TryGit$ git add TryGitResources/build/build.sql
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you can merge.
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Changes to be committed:
#
# modified: TryGitCore/src/main/java/com/TryGit/core/api/binding.xml
# modified: TryGitResources/build/build.sql
# modified: TryGitServices/src/main/java/com/TryGit/services/api/impl/ApiServiceImpl.java
# modified: TryGitServices/src/main/java/com/TryGit/services/common/impl/StartupServiceImpl.java
# modified: TryGitWeb/src/main/webapp/WEB-INF/wsdl/TryGit.wsdl
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/homeDeal.css
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/TryGit.css
# modified: TryGitWeb/src/main/webapp/static/img/TryGit/sprite/TryGit.png
# modified: TryGitWeb/src/main/webapp/views/admin/createPromoCode.jsp
# modified: TryGitWeb/src/main/webapp/views/admin/product/productAdmin.jsp
# modified: TryGitWeb/src/main/webapp/views/deal/homePage.jsp
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you can merge.
kamal@kamal-Lenovo-G470:~/git/TryGit$
I am a newbie to Git and having trouble understanding how to use Git. I have been using CVS so going through some learning curve for Git. Here is what all I tried
Now I had changed only two files PromoServiceImpl.java and build.sql. However having trouble merging changed from "product" branch.
Remaining files that you see (like ApiServiceImpl.java etc) are changes from other users but I am not sure if the representation here suggests that I have changed them. Prob it got merged during earlier pull commands and now it expects me to commit them ??
No matter whatever is the flow of commands I follow (even after some Google search) I see the following error:
You have not concluded your merge (MERGE_HEAD exists)
Please, commit your changes before you can merge.
Here is the sequence of commands I followed and output (tried to make it pretty by inserting new lines for everyone to read). Also this error comes back even after taking changes from repository afresh so I am sure I am doing something wrong rather than some issue with git.
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: TryGitServices/src/main/java/com/TryGit/services/promo/impl/PromoServiceImpl.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
no changes added to commit (use "git add" and/or "git commit -a")
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
From ssh://192.168.2.251/TryGit
* branch product -> FETCH_HEAD
Auto-merging TryGitResources/build/build.sql
CONFLICT (content): Merge conflict in TryGitResources/build/build.sql
Automatic merge failed; fix conflicts and then commit the result.
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Changes to be committed:
#
# modified: TryGitCore/src/main/java/com/TryGit/core/api/binding.xml
# modified: TryGitServices/src/main/java/com/TryGit/services/api/impl/ApiServiceImpl.java
# modified: TryGitServices/src/main/java/com/TryGit/services/common/impl/StartupServiceImpl.java
# modified: TryGitWeb/src/main/webapp/WEB-INF/wsdl/TryGit.wsdl
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/homeDeal.css
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/TryGit.css
# modified: TryGitWeb/src/main/webapp/static/img/TryGit/sprite/TryGit.png
# modified: TryGitWeb/src/main/webapp/views/admin/createPromoCode.jsp
# modified: TryGitWeb/src/main/webapp/views/admin/product/productAdmin.jsp
# modified: TryGitWeb/src/main/webapp/views/deal/homePage.jsp
#
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: TryGitResources/build/build.sql
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: TryGitServices/src/main/java/com/TryGit/services/promo/impl/PromoServiceImpl.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ git reset TryGitResources/build/build.sql
Unstaged changes after reset:
M TryGitResources/build/build.sql
M TryGitServices/src/main/java/com/TryGit/services/promo/impl/PromoServiceImpl.java
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Changes to be committed:
#
# modified: TryGitCore/src/main/java/com/TryGit/core/api/binding.xml
# modified: TryGitResources/build/build.sql
# modified: TryGitServices/src/main/java/com/TryGit/services/api/impl/ApiServiceImpl.java
# modified: TryGitServices/src/main/java/com/TryGit/services/common/impl/StartupServiceImpl.java
# modified: TryGitWeb/src/main/webapp/WEB-INF/wsdl/TryGit.wsdl
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/homeDeal.css
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/TryGit.css
# modified: TryGitWeb/src/main/webapp/static/img/TryGit/sprite/TryGit.png
# modified: TryGitWeb/src/main/webapp/views/admin/createPromoCode.jsp
# modified: TryGitWeb/src/main/webapp/views/admin/product/productAdmin.jsp
# modified: TryGitWeb/src/main/webapp/views/deal/homePage.jsp
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: TryGitResources/build/build.sql
# modified: TryGitServices/src/main/java/com/TryGit/services/promo/impl/PromoServiceImpl.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ git stash
Saved working directory and index state WIP on product: b8bb080 changing build.sql for RBT task
HEAD is now at b8bb080 changing build.sql for RBT task
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
nothing added to commit but untracked files present (use "git add" to track)
kamal@kamal-Lenovo-G470:~/git/TryGit$ git reset Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ git reset Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
nothing added to commit but untracked files present (use "git add" to track)
kamal@kamal-Lenovo-G470:~/git/TryGit$ git rm Adding
fatal: pathspec 'Adding' did not match any files
kamal@kamal-Lenovo-G470:~/git/TryGit$ man git rm
kamal@kamal-Lenovo-G470:~/git/TryGit$ git rm Adding
fatal: pathspec 'Adding' did not match any files
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
nothing added to commit but untracked files present (use "git add" to track)
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
remote: Counting objects: 566, done.
remote: Compressing objects: 100% (316/316), done.
remote: Total 386 (delta 207), reused 0 (delta 0)
Receiving objects: 100% (386/386), 203.81 KiB, done.
Resolving deltas: 100% (207/207), completed with 56 local objects.
From ssh://192.168.2.251/TryGit
* branch product -> FETCH_HEAD
Auto-merging TryGitResources/build/build.sql
CONFLICT (content): Merge conflict in TryGitResources/build/build.sql
Automatic merge failed; fix conflicts and then commit the result.
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
M TryGitCore/src/main/java/com/TryGit/core/api/binding.xml
U TryGitResources/build/build.sql
M TryGitServices/src/main/java/com/TryGit/services/api/impl/ApiServiceImpl.java
M TryGitServices/src/main/java/com/TryGit/services/common/impl/StartupServiceImpl.java
M TryGitWeb/src/main/webapp/WEB-INF/wsdl/TryGit.wsdl
M TryGitWeb/src/main/webapp/static/css/TryGit/homeDeal.css
M TryGitWeb/src/main/webapp/static/css/TryGit/TryGit.css
M TryGitWeb/src/main/webapp/static/img/TryGit/sprite/TryGit.png
M TryGitWeb/src/main/webapp/views/admin/createPromoCode.jsp
M TryGitWeb/src/main/webapp/views/admin/product/productAdmin.jsp
M TryGitWeb/src/main/webapp/views/deal/homePage.jsp
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
kamal@kamal-Lenovo-G470:~/git/TryGit$ git add TryGitResources/build/build.sql
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you can merge.
kamal@kamal-Lenovo-G470:~/git/TryGit$ gs
# On branch product
# Your branch is ahead of 'origin/product' by 1 commit.
#
# Changes to be committed:
#
# modified: TryGitCore/src/main/java/com/TryGit/core/api/binding.xml
# modified: TryGitResources/build/build.sql
# modified: TryGitServices/src/main/java/com/TryGit/services/api/impl/ApiServiceImpl.java
# modified: TryGitServices/src/main/java/com/TryGit/services/common/impl/StartupServiceImpl.java
# modified: TryGitWeb/src/main/webapp/WEB-INF/wsdl/TryGit.wsdl
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/homeDeal.css
# modified: TryGitWeb/src/main/webapp/static/css/TryGit/TryGit.css
# modified: TryGitWeb/src/main/webapp/static/img/TryGit/sprite/TryGit.png
# modified: TryGitWeb/src/main/webapp/views/admin/createPromoCode.jsp
# modified: TryGitWeb/src/main/webapp/views/admin/product/productAdmin.jsp
# modified: TryGitWeb/src/main/webapp/views/deal/homePage.jsp
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Adding
kamal@kamal-Lenovo-G470:~/git/TryGit$ git pull origin product
You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you can merge.
kamal@kamal-Lenovo-G470:~/git/TryGit$
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里发生了一些事情。它有助于理解当您发出各种 Git 命令时会发生什么。
pull
命令(如git pull
)导致一次fetch
,然后是merge
。因此,当您进行pull
操作时,Git 尝试从默认远程存储库中提取更改
并将它们合并到其中。
这样做时遇到了冲突
Git 维护着等待合并的文件的这 3 个版本 - 您的更改、拉入的更改以及共同祖先。拉入的版本暂时存储在MERGE_HEAD中。
您可以通过 git diff 调用查看差异。此时您需要修复 Git 无法自动解决的冲突。修复后,只需执行通常的 git add ,然后执行 git commit 即可。
commit
命令的手册页的示例部分也解释了此过程。哦!您似乎有一个名为
Adding
的文件。请注意,git status
命令以以下结尾当您要求 Git 跟踪目录时(例如当您执行
git init .
时),就会发生这种情况。从此Git监视指定位置的变化。上面是说“我看到你添加了一个名为Adding的文件。我对它了解不多(它是未跟踪的)。”添加后,Git 开始跟踪更改(可以告诉您随着时间的推移发生了什么变化)。There are a couple of things going on here. It helps to understand what happens when you issue various Git commands.
The
pull
command (as ingit pull
) results in afetch
followed by amerge
. So when you did apull
Git tried to pull in changes from the default remote repository
and merge them in.
In so doing it encountered a conflict
Git maintains this 3 versions of the file pending a merge -- your changes, changes pulled in and the common ancestor. The version pulled in is temporarily stored in MERGE_HEAD.
You can see the differences with a
git diff
invocation. At this point you need to fix the conflicts that Git was unable to automatically resolve. Once you have fixed it simply perform the usualgit add
followed by agit commit
. This process is also explained in the examples section of the man page for thecommit
command.Oh! And it appears you have a file called
Adding
. Note that thegit status
command ends withThis happens when you ask Git to track a directory (such as when you did
git init .
). From then on Git monitors changes in the specified location. The above is saying that "I see that you have added a file called Adding. I don't know much more about it (it is untracked)." Once you add it, Git starts tracking changes (can tell you what has changed with it over time).