Git rebasing attribute the change to the wrong file

80 Views Asked by At

I think I found a bug in git, where a change gets attributed to the wrong file when doing a rebasing, is there any known workaround ?

Short summary

Assume master_branch

.
└── parent_folder
    ├── project_a
    │   └── file.txt 
    └── project_b
        └── file.txt # the 2 file.txt have the same content on master

Assume feature_branch from master

.
└── parent_folder
    ├── project_a
    │   └── file.txt
    └── project_b
        └── file.txt # this file got modified with a feature

Assume refactor_branch from master

.
└── refactored_parent_folder # got renamed
    ├── project_a
    │   └── file.txt
    └── project_b
        └── file.txt 

then rebase feature_branch on refactor_branch,

.
└── refactored_parent_folder 
    ├── project_a
    │   └── file.txt # the feature got moved here !
    └── project_b
        └── file.txt # instead of here, where it should be !

Reproduction bash script

#!/usr/bin/env bash

# tested on linux, git version 2.34.1, 2.43.2.

set -ex
# create a master branch
mkdir -p git_repo
cd git_repo
git init
mkdir -p parent_folder/project_a
echo -e "1\n2\n3" > parent_folder/project_a/file.txt
cp -r parent_folder/project_a parent_folder/project_b
git add .
git commit -m "initial commit"
# we create a feature_branch from master
git branch "feature_branch"

# we create a refactoring_branch from master
git checkout -b "refactoring_branch"

git mv parent_folder refactored_parent_folder
git add .
git commit -m "refactor"

# we create a new feature in project_b
git checkout "feature_branch"
echo -e "1\n2_some_new_feature_in_project_b\n3" > parent_folder/project_b/file.txt
git add .
git commit -m "new feature"

# we rebase 
git rebase refactoring_branch
cat refactored_parent_folder/project_a/file.txt
# refactored_parent_folder/project_a/file.txt contains the line 2_some_new_feature_in_project_I think I found a bug in gitb, which is WRONG ! 
# It should have ended  up in refactored_parent_folder/project_b/file.txt


ENV

tested on linux, git version 2.34.1, 2.43.2 are affected

0

There are 0 best solutions below