Hello, I think I found a bug in git, where a change get attributed to the wrong file when doing a rebasing. # 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 [System Info] git version: git version 2.43.2 cpu: x86_64 no commit associated with this build sizeof-long: 8 sizeof-size_t: 8 shell-path: /bin/sh uname: Linux 6.5.0-18-generic #18~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Feb 7 11:40:03 UTC 2 x86_64 compiler info: gnuc: 11.4 libc info: glibc: 2.35 $SHELL (typically, interactive shell): /usr/bin/zsh [Enabled Hooks]