git doesn't see changes in branch

Question:

git doesn't see the changes in the branch, after git push origin remote_branch and comparing with master it doesn't show any changes, even though a lot of changes were made in the file but comparing with the master doesn't show any difference.

There is a suspicion that these changes have already been committed on this branch and removed, and now git does not see this commit and, accordingly, its changes.

Here is a picture:

git checkout -b new_branch

git commit -m "some commits"

git push origin new_branch

git checkout -b my_new_branch_2    

git pull origin new_branch

At this point, I get all the commits that were in the new_branch branch and remove some changes in the test.txt files

git push origin my_new_branch_2

git checkout master
git merge my_new_branch_2

Here I merged with the master.

Now when we try to merge with mater from the new_branch branch from which I previously pulled, it says that there are no changes in the test.txt file

Answer:

What is a "branch"

It's just a pointer to some commit. All commits are organized in a graph in which each commit (except the first one) has an ancestor. So for one commit, you can pull out the whole chain – up to the very first one. All the commits that are pulled like this are referred to as "commits on branch X" or "belonging to branch X".

Suppose it was like this:

A - B - C      master
          \
           D   new_branch

What does git checkout -b do?

This command creates a new branch pointing to the same commit pointed to by the current branch:

git checkout -b my_new_branch_2   

A - B - C      master
          \
           D   new_branch, my_new_branch_2

That is, after executing this command, the branches new_branch and my_new_branch_2 are identical.

What does git pull origin имяветки

The git pull command merges a branch from a remote repository into the current branch. If you freeze a commit that already belongs to the current branch (i.e., is available along the ancestor chain), then the merge will not make any changes.

If no one but you is pushing to the new_branch branch, then it points to the same commit D as the my_new_branch_2 branch, so this command does nothing:

git pull origin new_branch

Ancestor merge

If after that you make more commits to my_new_branch_2 , but do not change new_branch , then the second one will actually be a “part” of the first one. new_branch branch points to commit D , which is an ancestor of E , and therefore belongs to the my_new_branch_2 branch:

A - B - C      master
          \
           D   new_branch
            \
             E my_new_branch_2

When you merge my_new_branch_2 into master , the commits of the new_branch branch also come as part of that branch. Merge most likely occurs according to the "fast-forward" model – when the master pointer simply moves forward to the my_new_branch_2 pointer:

A - B - C - D   new_branch
             \
              E my_new_branch_2, master

Therefore, trying to refreeze new_branch in master does not work.

Scroll to Top