Bug Report: subtree then rebase causes unrelated history to conflict

From: Gabriel Ford <hidden>
Date: 2026-08-22 16:10:12

I created this report from the git bugreport template following
https://git-scm.com/community. Thanks to anyone who takes the time to
read and look into this! Please let me know if there are any follow up
questions or if anything is unclear. This is my first bug report to git
so please let me know if I should have written anything different!

What did you do before the bug happened? (Steps to reproduce your issue)

  I found this when using git subtree to vendor this library
  (https://github.com/htfy96/dollar), I believe this will also happen in any
  similar cases where the subtree has a file with an identical path as one of the
  files in your repo.
  
  I was able to repro this from a brand new repository as follows:
  
  mkdir ./test_repo 
  cd ./test_repo
  touch .clang-format
  echo 'Any text in this file should work' > .clang-format
  git commit -m "create .clang-format in main repo"
  
  git checkout -b feat_branch
  git subtree add --prefix dollar_subtree git@github.com:htfy96/dollar.git master --squash
  
  git checkout master
  touch foo.txt
  git commit -m "commit anything so that we have something to rebase onto"
  
  git checkout feat_branch
  git rebase master
  
  You should see that there is a conflict that needs resolution between the main
  .clang-format file we created, and the subprojects .clang-format even though
  the files are in seperate dirs.


What did you expect to happen? (Expected behavior)
  I did not expect a conflict since the .clang-format file we created didn't change.


What happened instead? (Actual behavior)
  There was a conflict between the two files in seperate dirs. 


What's different between what you expected and what actually happened?
  The rebase conflict that occured.


Anything else you want to add:
  I think this is happening due to the way git subtree is squash merging in the
  subproject, even though a git blame on the .clang-format we created doesn't
  show any changes, it appears that the history conflicts since the path
  relative to the root is the same in the subproject.


Please review the rest of the bug report below.
You can delete any lines you don't wish to share.


[System Info]
git version:
git version 2.55.0
cpu: x86_64
built from commit: e9019fcafe0040228b8631c30f97ae1adb61bcdc
sizeof-long: 8
sizeof-size_t: 8
shell-path: /bin/sh
rust: enabled
feature: fsmonitor--daemon
gettext: enabled
libcurl: 8.21.0
OpenSSL: OpenSSL 3.6.3 9 Jun 2026
zlib-ng: 2.3.3
SHA-1: SHA1_DC
SHA-256: SHA256_BLK
default-ref-format: files
default-hash: sha1
uname: Linux 7.1.8-arch1-3 #1 SMP PREEMPT_DYNAMIC Tue, 11 Aug 2026 09:16:08 +0000 x86_64
compiler info: gnuc: 16.1
libc info: glibc: 2.44
$SHELL (typically, interactive shell): /usr/bin/fish


[Enabled Hooks]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help