There isn't anything to compare. Nothing to compare, branches are entirely different commit histories

后端 未结 18 801
北恋
北恋 2020-12-12 22:54

I have a CMS theme installed on my machine. I\'m tracking changes to it via git and decided to back it up on GitHub so I could share those changes.

The theme as prov

相关标签:
18条回答
  • 2020-12-12 23:03

    This looks like undesirable behavior on github's part, but it's fairly easy to fix. What you want to do is to rebase your branch on a reasonable (any reasonable) commit in the existing history. What you can do is to fetch the github repo and find which tree in its history is most similar to the one you started with. Start this way:

    git remote add github u://r/l
    git fetch github
    
    myroot=`git rev-list master --max-parents=0`
    root_tree=`git rev-parse $myroot^{tree}`
    
    github_base=`git log --pretty=%H\ %T github/master | sed -n "s/$root_tree//p"`
    

    With any luck, that will find you a commit in the github history that has the exact tree you started with. Assuming it does,

    git rebase --onto $github_base $myroot master 
    

    and you're done.


    If that doesn't find a matching tree, you get to find a nearest approximation. Here's one way to get a rough estimate of the differences:

    git log --pretty='echo %H $(git diff-tree -p -b -U0 '$myroot:' %T|wc -l)' github/master \
    | sh
    

    which will count the lines in a minimized diff between the tree of each commit in the github/master history and your root tree. It seems reasonable to hope for a nice small difference, you could eyeball the actual diffs on it before calling that the github_base commit and doing the rebase above.


    0 讨论(0)
  • 2020-12-12 23:04

    From the experiment branch

    git rebase master
    git push -f origin <experiment-branch>
    

    This creates a common commit history to be able to compare both branches.

    0 讨论(0)
  • 2020-12-12 23:05

    Terminology

    First, let's get some terminology out of the way...

    upstream <= The remote git repo (likely whose master or release branch is in production)

    forked-repo <= The remote [experimental git repo] (https://docs.github.com/en/github/getting-started-with-github/fork-a-repo) also known as "origin".

    local repo <= The files and directories that you work with on your local workstaion, which you likely got by running a git clone my-forked-repo.git command

    local index <= Also known as your local git "stage", i.e., where you stage your files before pushing them to you remote repo.

    Github workflow process

    Next, let's talk about the process of getting your changes to the upstream repo:

    The process is generally to work on a feature branch and then push said branch, and open a Pull Request, either to your forked-repo's master branch or to the upstream's master branch

    Create a feature branch by running git checkout -b FEATURE_BRANCH_NAME

    Add/delete/modify files project files.

    Add files by running git add .

    Commit your files to your index by running git commit -m'My commit message'

    Push your staged files by running git push origin FEATURE_BRANCH_NAME

    Solution for entirely different commit histories

    The master and upstreambranch are entirely different commit histories message can occur when you've forked a git repository and have changed your git history.

    For example, if you fork a repo and pull your forked repo to work on it locally...

    If then you decide to rewrite the entire application and then decide it's a good idea to deleting all existing files, including the forked-repo's .git directory. You add new files and directories to recreate your app and also recreate your .git directory with git init command.

    Now, your application works great with your new files and you want to get it merged into the upstream repo. However, when you push your changes you get that "...entirely different commit histories..." error message.

    You'll see that your original git commit will be different in your new local directory and if in your remote fork (as well as your upstream). Check this out by running this command in your current directory: git log --reverse master. Then running the following: pushd $(mktemp -d); git clone https://github.com/my-forking-username/my-forked-repo.git; git log --reverse master; popd

    You must fix your local .git repo to match your remote my-forked-repo if you want to push your commits and subsequently perform a pull request (in hopes of merging your new updates to the upstream/master branch).

    git clone https://github.com/my-forking-username/my-forked-repo.git
    cd my-forked-repo
    git checkout -b my-new-files-branch-name
    # Delete all files and directories except for the .git directory
    git add .
    git commit -m'Remove old files'
    # Copy your new files to this my-forked-repo directory
    git add .
    git commit -m'Add new files'
    git push origin my-new-files-branch-name
    

    Create a PR on GitHub and request to merge your my-new-files-branch-name branch in your my-forked-repo into master.

    Note: The "...entirely different commit histories..." error message can also occur in non-forked repos for the same reasons and can be fixed with the same solution above.

    0 讨论(0)
  • 2020-12-12 23:06

    A more simple approach where you can't mingle with the master.

    Consider i have master and JIRA-1234 branch and when i am trying to merge JIRA-1234 to master i am getting the above issue so please follow below steps:-

    1. From JIRA-1234 cut a branch JIRA-1234-rebase (Its a temp branch and can have any name. I have taken JIRA-1234-rebase to be meaningful.)

      git checkout JIRA-1234

      git checkout -b JIRA-1234-rebase

    2. The above command will create a new branch JIRA-1234-rebase and will checkout it.

    3. Now we will rebase our master.

      git rebase master (This is executed in the same branch JIRA-1234-rebase)

    4. You will see a window showing the commit history from first commit till the last commit on JIRA-1234-rebase. So if we have 98 commits then it will rebase them 1 by 1 and you will see something like 1/98.

    5. Here we just need to pick the commit we want so if you want this commit then don't do anything and just HIT Esc then :q! and HIT ENTER.
    6. There would be some changes in case of conflict and you need to resolve this conflict and then add the files by

      git add <FILE_NAME>.

    7. Now do git rebase continue it will take you to rebase 2/98 and similarly you have to go through all the 98 commits and resolve all of them and remeber we need to add the files in each commit.

    8. Finally you can now push these commits and then raise Pull Request by

      git push or git push origin JIRA-1234-rebase

    0 讨论(0)
  • 2020-12-12 23:07

    You can force update your master branch as follows:

    git checkout upstreambranch  
    git branch master upstreambranch -f    
    git checkout master  
    git push origin master -f
    

    For the ones who have problem to merge into main branch (Which is the new default one in Github) you can use the following:

    git checkout master  
    git branch main master -f    
    git checkout main  
    git push origin main -f
    

    The following command will force both branches to have the same history:

    git branch [Branch1] [Branch2] -f 
    
    0 讨论(0)
  • 2020-12-12 23:09

    I solve my issue using these commands

    git checkout [BRANCH]   
    git branch master [BRANCH] -f   
    git checkout master   
    git push origin master -f
    
    0 讨论(0)
提交回复
热议问题