Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 366669
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 12, 20262026-05-12T13:39:16+00:00 2026-05-12T13:39:16+00:00

We have a Current branch where the main development happens. For a while I

  • 0

We have a Current branch where the main development happens. For a while I have been working on something kind of experimental in a separate branch. In other words I branched what I needed from the Current branch into an Experimental branch. While working I have regularly merged Current into Experimental so that I have the changes others have made, so that I am sure what I make work with their changes.

I now want to merge back into Current. First I merged Current into Experimental, compiled and made sure everything was working. So in my head, Experimental and Current should be “in sync”. But when I try to merge Experimental back into Current, I get a whole bunch of conflicts. But I thought I had already kind of solved those when I merged Current into Experimental.

What is going on? Have I totally misunderstood something? How can I do this smoothly? Really don’t want to go through all of those conflicts…

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-12T13:39:17+00:00Added an answer on May 12, 2026 at 1:39 pm

    When you click Resolve on an individual conflict, what does the summary message say? If your merges from Current -> Experimental were completed without major manual work, it should be something like “X source, 0 target, Y both, 0 conflicting.” In other words, there are no content blocks in the target (Current) file that aren’t already in the source branch’s copy (Experimental). You can safely use the AutoMerge All button.

    Note: AutoMerge should be safe regardless. It’s optimized to be conservative about early warnings, not for the ability to solve every case. But I recognize that many of us — myself included — like to fire up the merge tool when there’s any question. In the scenario described, IMO, even the most skittish can rest easy.


    Why is there a conflict at all? And what if the summary message isn’t so cut & dry? Glad you asked 🙂 Short answer – because the calculation that determines the common ancestor (“base”) of related files depends heavily on how prior merge conflicts between them were resolved. Simple example:

    1. set up two branches, A and B.
    2. make edits to A\foo.cs and B\foo.cs in separate parts of the file
    3. merge A -> B
    4. AutoMerge the conflict
    5. merge B -> A

    TFS must flag this sequence of events as conflicting. The closest common ancestor between B\foo.cs;4 and A\foo.cs;2 lies all the way back at step 1, and both sides have obviously changed since then.

    It’s tempting to say that A & B are in sync after step 4. (More precisely: that the common ancestor for step 5’s merge is version #2). Surely a successful content merge implies that B\foo.cs contains all the changes made to date? Unfortunately there are a number of reasons you cannot assume this:

    • Generality: not all conflicts can be AutoMerged. You need criteria that apply to both scenarios.

    • Correctness: even when AutoMerge succeeds, it doesn’t always generate valid code. A classic example arises when two people add the same field to different parts of a class definition.

    • Flexibility: every source control user has their own favorite merge tools. And they need the ability to continue development/testing between the initial Resolve decision [“need to merge the contents somehow, someday”] and the final Checkin [“here, this works”].

    • Architecture: in a centralized system like TFS, the server simply can’t trust anything but its own database + the API’s validation requirements. So long as the input meets spec, the server shouldn’t try to distinguish how various types of content merges were performed. (If you think the scenarios so far are easily distinguished, consider: what if the AutoMerge engine has a bug? What if a rogue client calls the webservice directly with arbitrary file contents? Only scratching the surface here…servers have to be skeptical for a reason!) All it can safely calculate is you sent me a resulting file that doesn’t match the source or target.

    Putting these requirements together, you end up with a design that lumps our actions in step 4 into a fairly broad category that also includes manual merges resulting from overlapping edits, content merges [auto or not] provided by 3rd party tools, and files hand-edited after the fact. In TFS terminology this is an AcceptMerge resolution. Once recorded as such, the Rules of Merge(tm) have to assume the worst in pursuit of historical integrity and the safety of future operations. In the process your semantic intentions for Step 4 (“fully incorporate into B every change that was made to A in #2”) were dumbed down to a few bytes of pure logic (“give B the following new contents + credit for handling #2”). While unfortunate, it’s “just” a UX / education problem. People get far angrier when the Rules of Merge make bad assumptions that lead to broken code and data loss. By contrast, all you have to do is click a button.

    FWIW, there are many other endings to this story. If you chose Copy From Source Branch [aka AcceptTheirs] in step 4, there would be no conflict in step 5. Ditto if you chose an AcceptMerge resolution but happened to commit a file with the same MD5 hash as A\foo.cs;2. If you chose Keep Target [aka AcceptYours] instead, the downstream consequences change yet again, though I can’t remember the details right now. All of the above get quite complex when you add other changetypes (especially Rename), merge branches that are far more out of sync than in my example, cherry pick certain version ranges and deal with the orphans later, etc….


    EDIT: as fate would have it, someone else just asked the exact same question on the MSDN forum. As tends to be my nature, I wrote them another long answer that came out completely different! (though obviously touching on the same key points) Hope this helps: http://social.msdn.microsoft.com/Forums/en-US/tfsversioncontrol/thread/e567b8ed-fc66-4b2b-a330-7c7d3a93cf1a

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 208k
  • Answers 208k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer I'm pretty sure Mobile Safari doesn't support XSLT, as the… May 12, 2026 at 9:30 pm
  • Editorial Team
    Editorial Team added an answer How do you currently set the string in your table… May 12, 2026 at 9:30 pm
  • Editorial Team
    Editorial Team added an answer Yes, it's possible. Consider a form like this: <form action="foobar.php?a=123&b=456"… May 12, 2026 at 9:30 pm

Related Questions

Currently in our enterprise we have a situation that i think it's not very
We have been experimenting with a new technique to manage our release branches. Generally,
My current place of employment is primarily a Microsoft shop and we use Visual
Is it possible to merge to a branch that is not a direct parent

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.