简体   繁体   中英

Why does git warn me that my branch has diverged from master?

I'm contributing to LibreOffice and have started learning git. I've cloned the LibreOffice repository and got the successful build. LibreOffice has 19 git repositories 1 named as bootstrap and remaining at one level lower named as writer, calc, postprocess, base etc. It has got a script maned g for running the git commands simultaneously in all the repositories instead of running then individually.

After cloning I created a patch which was pushed in remote repository. At this moment all my changes have been committed(ie git diff outputs nothing) and status is that I'm a commit ahead of master branch.

Now when I run ./g pull -r i get this output:

victor@victor-laptop:~/git/libo$ ./g pull -r
===== main repo =====
Current branch master is up to date.
===== artwork =====
Current branch master is up to date.
===== base =====
Current branch master is up to date.
===== calc =====
Current branch master is up to date.
===== components =====
Current branch master is up to date.
===== extensions =====
Current branch master is up to date.
===== extras =====
Current branch master is up to date.
===== filters =====
Current branch master is up to date.
===== help =====
Current branch master is up to date.
===== impress =====
Current branch master is up to date.
===== libs-core =====
Current branch master is up to date.
===== libs-extern =====
Current branch master is up to date.
===== libs-extern-sys =====
Current branch master is up to date.
===== libs-gui =====
From http://anongit.freedesktop.org/git/libreoffice/libs-gui
   08137a2..d314277  master     -> origin/master
First, rewinding head to replay your work on top of it...
Fast-forwarded master to d3142771895c2e9ce029e3b52af7f1ea1b437a6b.
===== postprocess =====
Current branch master is up to date.
===== sdk =====
Current branch master is up to date.
===== testing =====
Current branch master is up to date.
===== ure =====
Current branch master is up to date.
===== writer =====
U   sw/source/core/doc/docdesc.cxx
U   sw/source/core/frmedt/fews.cxx
M   sw/source/core/inc/SwXMLBlockExport.hxx
U   sw/source/core/inc/UndoCore.hxx
U   sw/source/core/inc/ascharanchoredobjectposition.hxx
U   sw/source/core/inc/frame.hxx
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'.

which shows some problem with some files in the write module (sw) and the files mentioned are some from the ones used in the patch which I contributed.

the git diff shows this:

victor@victor-laptop:~/git/libo$ cd sw
victor@victor-laptop:~/git/libo/sw$ git diff
diff --cc sw/source/core/doc/docdesc.cxx
index 0900b18,52b984e..0000000
--- a/sw/source/core/doc/docdesc.cxx
+++ b/sw/source/core/doc/docdesc.cxx
@@@ -216,7 -216,7 +216,11 @@@ void SwDoc::ChgPageDesc( sal_uInt16 i, 
      if( rChged.GetNumType().GetNumberingType() != pDesc->GetNumType().GetNumbe
      {
          pDesc->SetNumType( rChged.GetNumType() );
++<<<<<<< HEAD
 +        // den Seitennummernfeldern bescheid sagen,
++=======
+         // Bug 64121 - den Seitennummernfeldern bescheid sagen,
++>>>>>>> Removal of bogus comments in writer module
          //            das sich das Num-Format geaendert hat
          GetSysFldType( RES_PAGENUMBERFLD )->UpdateFlds();
          GetSysFldType( RES_REFPAGEGETFLD )->UpdateFlds();
diff --cc sw/source/core/frmedt/fews.cxx
index 6fe4bf0,4dc82ff..0000000
--- a/sw/source/core/frmedt/fews.cxx
+++ b/sw/source/core/frmedt/fews.cxx
@@@ -1266,6 -1267,7 +1266,10 @@@ Size SwFEShell::GetGraphicDefaultSize(
      return aRet;
  }

++<<<<<<< HEAD
++=======
+ // add output parameter <bVertL2R>
++>>>>>>> Removal of bogus comments in writer module
  sal_Bool SwFEShell::IsFrmVertical(const sal_Bool bEnvironment, sal_Bool& bRTL,
  {
      sal_Bool bVert = sal_False;
diff --cc sw/source/core/inc/UndoCore.hxx
index e8fda05,99f4722..0000000
--- a/sw/source/core/inc/UndoCore.hxx
+++ b/sw/source/core/inc/UndoCore.hxx
@@@ -133,6 -133,7 +133,10 @@@ class SwUndoFmtColl : public SwUndo, pr
      void DoSetFmtColl(SwDoc & rDoc, SwPaM & rPaM);

  public:
++<<<<<<< HEAD
++=======
+ //    SwUndoFmtColl( const SwPaM&, SwFmtColl* );
++>>>>>>> Removal of bogus comments in writer module
      SwUndoFmtColl( const SwPaM&, SwFmtColl*,
                     const bool bReset,
                     const bool bResetListAttrs );
@@@ -202,6 -203,7 +206,10 @@@ public
      virtual void RepeatImpl( ::sw::RepeatContext & );
  };

++<<<<<<< HEAD
++=======
+ //--------------------------------------------------------------------
++>>>>>>> Removal of bogus comments in writer module

  const int nUndoStringLength = 20;

diff --cc sw/source/core/inc/ascharanchoredobjectposition.hxx
index 16dde41,2f868a9..0000000
--- a/sw/source/core/inc/ascharanchoredobjectposition.hxx
+++ b/sw/source/core/inc/ascharanchoredobjectposition.hxx
@@@ -140,7 -140,7 +140,11 @@@ namespace objectpositionin
              Point GetAnchorPos() const;

             // calculated relative position to base line for object position ty
++<<<<<<< HEAD
 +
++=======
+            
++>>>>>>> Removal of bogus comments in writer module
              SwTwips GetRelPosY() const;

            // determined object rectangle including spacing for object position
diff --cc sw/source/core/inc/frame.hxx
index 664f28b,94db9cc..0000000
--- a/sw/source/core/inc/frame.hxx
+++ b/sw/source/core/inc/frame.hxx
@@@ -248,6 -250,9 +248,12 @@@ enum MakePageTyp
      MAKEPAGE_NOSECTION        // Don't create section frames
  };

++<<<<<<< HEAD
++=======
+ // #i28701# - replaced by new class <SwSortedObjs>
+ //typedef SdrObject* SdrObjectPtr;
+ //SV_DECL_PTRARR(SwDrawObjs,SdrObjectPtr,1,1);
++>>>>>>> Removal of bogus comments in writer module

  class SwFrm: public SwClient, public SfxBroadcaster
  {
(END)

and git status shows this:

victor@victor-laptop:~/git/libo/clone/writer$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   sw/source/core/inc/SwXMLBlockExport.hxx
#
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      sw/source/core/doc/docdesc.cxx
#   both modified:      sw/source/core/frmedt/fews.cxx
#   both modified:      sw/source/core/inc/UndoCore.hxx
#   both modified:      sw/source/core/inc/ascharanchoredobjectposition.hxx
#   both modified:      sw/source/core/inc/frame.hxx
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   0001-Removal-of-bogus-comments-in-writer-module.patch

If I try to resolve conflicts by manually editing those files, git tells me that my master has diverged from origin/master. This situation continues in a cycle. Please help me out. What can the problem be and how can I resolve it?

Why does git warn me that my branch has diverged from master?

Git is warning you that your branch has diverged from master because your branch has diverged from master.

If I understood the situation correctly, first you created a new commit (let's call it B ) on top of master (let's call it A ). Git says correctly that you are one commit ahead of origin 's master .

A---B

Meanwhile, other people added new commits on top of origin 's master :

A---B
 \
  C---D---E

At this point, your master and origin 's master have diverged. You have one commit which origin/master does not have, and origin/master has 3 commits which you do not have. One of these 3 might even be the patch you sent (I see the file created by git format-patch in your git status output, so I am guessing you sent it as a patch); applying a patch will not create the exact same commit (at least the commiter name and timestamp will be different).

When you do a git pull , git has to merge your commit ( B ) with the commits you do not have, creating a merge commit (let's call it F ):

A---B-------F
 \         /
  C---D---E

Note that, again, origin/master does not have your commits ( B and F this time). If anyone adds new commits to origin/master , you will have to merge again.

Now, how to get out of this situation? There are several ways. One is to push your changes to origin , so now it has everything you have. Another is to abandon your commits and reset your master to origin/master . And a third one is to rebase your commits on top of origin/master .

If I am guessing correctly that you sent your changes by email via git format-patch and they were already applied, the best way out in your case would be to reset your master to origin/master . To avoid this problem in the future, it is best to work in a separate branch and switch back to master before pulling changes from upstream.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM