What Git commands will display content present only in a branch whose commits have been fully merged to master
? Some content may be missing from master
because, for example some merge operations may have used the ours
strategy, ignoring the branch content (i.e. git merge --strategy ours branch
).
I have found that the usual Git comparison operations do not produce the result that I desire.
For example, commands git diff master..branch
and git diff branch..master
do not work because these show content differences present in master
. (How can I modify this command to omit the changes on master
?)
Command git diff master...branch
also does not work because all commits on branch
have previously been merged to master in multiple merge operations over time.
Example:
- Create file
a.txt
in branchmaster
. - Add line 1 to
a.txt
in branchmaster
. - Create branch
branch
. - Add line 2 to
a.txt
in branchbranch
. - Switch to branch
master
. - Add line 2 to
a.txt
in branchmaster
. - Merge branch
branch
tomaster
using strategyours
. This is like a "dummy" merge which merges all commits onbranch
tomaster
, but discards their content. - Compare branches
master
andbranch
.
Command sequence:
derek@derek-lubuntu:~/Projects$ git init test
Initialized empty Git repository in /home/derek/Projects/test/.git/
derek@derek-lubuntu:~/Projects$ cd test
derek@derek-lubuntu:~/Projects/test$ touch a.txt
derek@derek-lubuntu:~/Projects/test$ git add a.txt
derek@derek-lubuntu:~/Projects/test$ git commit --message "Added a.txt."
[master (root-commit) 6a36816] Added a.txt.
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
derek@derek-lubuntu:~/Projects/test$ echo "Line 1 from master." >> a.txt
derek@derek-lubuntu:~/Projects/test$ git commit -a --message "Added line 1."
[master c9ebf16] Added line 1.
1 file changed, 1 insertion(+)
derek@derek-lubuntu:~/Projects/test$ git checkout -b branch
Switched to a new branch 'branch'
derek@derek-lubuntu:~/Projects/test$ echo "Line 2 from branch." >> a.txt
derek@derek-lubuntu:~/Projects/test$ git commit -a --message "Added line 2."
[branch 8a142dd] Added line 2.
1 file changed, 1 insertion(+)
derek@derek-lubuntu:~/Projects/test$ cat a.txt
Line 1 from master.
Line 2 from branch.
derek@derek-lubuntu:~/Projects/test$ git checkout master
Switched to branch 'master'
derek@derek-lubuntu:~/Projects/test$ echo "Line 2 from master." >> a.txt
derek@derek-lubuntu:~/Projects/test$ git commit -a --message "Added line 2."
[master d496cc7] Added line 2.
1 file changed, 1 insertion(+)
derek@derek-lubuntu:~/Projects/test$ git merge --strategy ours branch
Merge made by the 'ours' strategy.
derek@derek-lubuntu:~/Projects/test$ git merge branch
Already up-to-date.
derek@derek-lubuntu:~/Projects/test$ git diff master..branch
diff --git a/a.txt b/a.txt
index f773e76..5dae91a 100644
--- a/a.txt
+++ b/a.txt
@@ -1,2 +1,2 @@
Line 1 from master.
-Line 2 from master.
+Line 2 from branch.
derek@derek-lubuntu:~/Projects/test$ git diff branch..master
diff --git a/a.txt b/a.txt
index 5dae91a..f773e76 100644
--- a/a.txt
+++ b/a.txt
@@ -1,2 +1,2 @@
Line 1 from master.
-Line 2 from branch.
+Line 2 from master.
derek@derek-lubuntu:~/Projects/test$ git diff master...branch
derek@derek-lubuntu:~/Projects/test$ git diff branch...master
diff --git a/a.txt b/a.txt
index 5dae91a..f773e76 100644
--- a/a.txt
+++ b/a.txt
@@ -1,2 +1,2 @@
Line 1 from master.
-Line 2 from branch.
+Line 2 from master.
What Git operation can I use to show only "+Line 2 from branch." while ignoring "+Line 2 from master." or "-Line 2 from master."?