我很难理解以下行为在git中是一件好事。下面是我为了帮助说明我的问题而准备的一个示例。很多时候,我的团队和我自己会发现有变更/提交进入了我们不想让它们进入的分支。
> git init sandbox && cd sandbox
> echo "data a" > a.txt && echo "data b" > b.txt
> git add -A && git commit -a -m "initial population"
[master (root-commit) d7eb6af] initial population
2 files changed, 2 insertions(+)
create mode 100644 a.txt
create mode 100644 b.txt
> git branch branch1
> echo "more data a" >> a.txt && git commit -a -m "changed a.txt on master"
[master 11eb82a] changed a.txt on master
1 file changed, 1 insertion(+)
> git branch branch2 && git checkout branch2
Switched to branch 'branch2'
> echo "more data b" >> b.txt && git commit -a -m "changed b.txt on branch2"
[branch2 25b38db] changed b.txt on branch2
1 file changed, 1 insertion(+)
> git checkout branch1
Switched to branch 'branch1'
> git merge branch2
Updating d7eb6af..25b38db
Fast-forward
a.txt | 1 +
b.txt | 1 +
2 files changed, 2 insertions(+)
请注意,上述情况中,即使在branch2上未被修改/触及,a.txt也会在合并中更新。在上述情况下,我希望git能够智能地识别到a.txt在branch2上没有更改,因此在应用更新到branch1时,不进行这些更改。
我做错了什么吗?是的,我可以选择性地挑选,这对于我知道自己所做更改的简单示例是有效的,但在实际情况下,当更改更大且您不知道可能受到影响时,这是不现实的。
明确一点,我不想从git获得这种行为。
git rebase -i branch1
也不是什么大问题,可以丢弃不需要的内容。如果分支差异保持足够小并且正确分块,则重写(未推送)历史记录将成为Git工具中最强大的功能之一。然而,并非每个人或每个工作流程都适用。 - Christopher