这是我经常遇到的情况。我们团队在发布分支中所做的第一件事就是从版本中删除-SNAPSHOT
后缀。我们根据需要进行最后一分钟的更改,有时这包括制作大修正。我在下面做了一个相同的git日志,显示了这一点。 (在问题的最后,会显示更详细的日志,这有助于更好地解释。)
* ea88c23 (release/1.0.0) Fix an embarrasing bug
* 5fe35e1 Drop SNAPSHOT in prep for release
| * 34433c6 (HEAD -> master) Add important features
| * fe41d3b Bump version to 1.1.0-SNAPSHOT
|/
* 8dcfc4f Add greet feature
* 0337c4c Bump version to 1.0.0-SNAPSHOT
* 775277d Inital commit
基本上发生的是
现在,我如何将这些更改从发布分支(release/1.0.0
)分支回到活动开发分支(master
) 干净利落? 我有几个潜在的解决方案,没有一个是非常有利的。
git checkout master
git merge release/1.0.0
# Fix conflicts manually
请记住,此示例简化为少量提交,并且版本仅位于单个文件中,但实际上可能有许多更改和许多文件与版本;因此,将release/1.0.0
合并到master
并修复由于版本更改引起的冲突的天真方法更加困难和烦人。
git checkout master
git merge release/1.0.0
git checkout --ours */pom.xml
如果POM文件中的所有内容都是版本,那么它很好,但这很危险,因为除了版本之外,pom文件中可能还有其他更改。当然,您可以在git diff
之前git checkout --ours */pom.xml
安全,但这仍然很烦人。
我不完全明白如何挑选,但我明白它的作用。这种方法的专家将是很容易忽略你总是不想要的一个提交,但是一个骗局是你最终会有很多额外的提交,这不一定是坏的但似乎很糟糕。
也许这是最好的方法,我只是紧张不安。看起来有时你会发现一次提交问题(无论出于何种原因)并追捕它影响事物的地方,但如果它被挑选出来(或从樱桃采摘中)那么你可能会错过一些地方。
* ea88c23 (release/1.0.0) Fix an embarrasing bug
| diff --git a/file b/file
| index e98206a..8ab686e 100644
| --- a/file
| +++ b/file
| @@ -1 +1 @@
| -Hell, World!
| +Hello, World!
* 5fe35e1 Drop SNAPSHOT in prep for release
| diff --git a/pom.xml b/pom.xml
| index f755149..3eefcb9 100644
| --- a/pom.xml
| +++ b/pom.xml
| @@ -1 +1 @@
| -1.0.0-SNAPSHOT
| +1.0.0
| * 34433c6 (HEAD -> master) Add important features
| | diff --git a/file2 b/file2
| | new file mode 100644
| | index 0000000..e6afbe7
| | --- /dev/null
| | +++ b/file2
| | @@ -0,0 +1 @@
| | +Import features
| * fe41d3b Bump version to 1.1.0-SNAPSHOT
|/
| diff --git a/pom.xml b/pom.xml
| index f755149..5902d52 100644
| --- a/pom.xml
| +++ b/pom.xml
| @@ -1 +1 @@
| -1.0.0-SNAPSHOT
| +1.1.0-SNAPSHOT
* 8dcfc4f Add greet feature
| diff --git a/file b/file
| new file mode 100644
| index 0000000..e98206a
| --- /dev/null
| +++ b/file
| @@ -0,0 +1 @@
| +Hell, World!
* 0337c4c Bump version to 1.0.0-SNAPSHOT
| diff --git a/pom.xml b/pom.xml
| new file mode 100644
| index 0000000..f755149
| --- /dev/null
| +++ b/pom.xml
| @@ -0,0 +1 @@
| +1.0.0-SNAPSHOT
* 775277d Inital commit
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..176a458
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e69de29
答案 0 :(得分:0)
这似乎发生了很多,我在撰写问题时找到了解决方案。
从日志片段5fe35e1
中我们 想要的提交master
,这是导致我们出现问题的提交。
* ea88c23 (release/1.0.0) Fix an embarrasing bug * 5fe35e1 Drop SNAPSHOT in prep for release | * 34433c6 (HEAD -> master) Add important features | * fe41d3b Bump version to 1.1.0-SNAPSHOT |/ * 8dcfc4f Add greet feature * 0337c4c Bump version to 1.0.0-SNAPSHOT * 775277d Inital commit
让我们摆脱它!
git checkout release/1.0.0
git checkout -b port-to-1.1.0
git revert 5fe35e1
# Now port-to-1.1.0 has all the changes we want and none of the ones we don't
git checkout master
git merge port-to-1.1.0
您可能仍然存在冲突,但是您不会遇到任何冲突版本。这种方法可以用来“摆脱”你不想要的任何提交。您的日志现在如下所示。请记住,还原不会删除提交本身,它只是撤消单个提交引入的所有更改。您可以在下方看到5fe35e1
仍在那里。
* 6683b44 (HEAD -> master) Merge branch 'port-to-1.1.0'
|\
| * 81e9bf5 (port-to-1.1.0) Revert "Drop SNAPSHOT in prep for release"
| * ea88c23 (release/1.0.0) Fix an embarrasing bug
| * 5fe35e1 Drop SNAPSHOT in prep for release
* | 34433c6 Add important features
* | fe41d3b Bump version to 1.1.0-SNAPSHOT
|/
* 8dcfc4f Add greet feature
* 0337c4c Bump version to 1.0.0-SNAPSHOT
* 775277d Inital commit