master
的分支中的内容?有些内容可能在master
中丢失,例如某些合并操作可能使用了ours
策略,忽略了分支内容(即git merge --strategy ours branch
)。我发现通常的Git比较操作不能产生我所需的结果。
例如,命令
git diff master..branch
和git diff branch..master
无法工作,因为这些命令显示了master
中存在的内容差异。(如何修改此命令以省略master
上的更改?)命令
git diff master...branch
也无法工作,因为所有branch
上的提交都曾在多个合并操作中被合并到master
中。示例:
- 在分支
master
中创建文件a.txt
。 - 在分支
master
中添加第1行到a.txt
。 - 创建分支
branch
。 - 在分支
branch
中添加第2行到a.txt
。 - 切换到分支
master
。 - 在分支
master
中添加第2行到a.txt
。 - 使用策略
ours
将分支branch
合并到master
。这类似于一个“虚拟”合并,将branch
上的所有提交合并到master
,但丢弃其内容。 - 比较分支
master
和branch
。
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.
我可以使用哪个Git操作来仅显示“+来自分支的第二行。”而忽略“+来自主分支的第二行。”或“-来自主分支的第二行。”?
git diff master branch
吗? - neshkeevgit diff master..branch
一模一样吗? - Derek Maharmaster
中不在branch
中的添加。git diff master branch
会显示双向添加/删除(我不知道有任何不会这样做的差异工具)。 - SnoringFrog