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