将具有文件重命名和编辑的git提交分成两个提交

时间:2016-03-02 14:11:07

标签: git

我正在进行一些重构,为了便于查看历史记录,我希望明确定义"将x文件夹重命名为y"提交与提交文件编辑的提交分开。

目前,我无法弄清楚如何将这些内容与git staging分开。

我绝对知道我可以移动文件 - 提交,编辑文件 - 提交,移动 - 提交,编辑 - 提交,但是对于某些IDE,您最好使用包含所有其他重构步骤的移动函数参与,但无法在git提交步骤中将其分开,我发现它有点混乱。

我的偏好是一个catchall命令,如git add -A :/,但在此,要指定 git文件的移动/重命名部分更改步骤。

1 个答案:

答案 0 :(得分:3)

这将需要一些脚本,但可以完成:首先,将涉及重命名和编辑的所有更改提交到临时分支(下图中的TMP1)。

然后,运行

git show -M --name-status

这将显示已重命名的文件及其相似性索引,标记为R<N>,如下例所示:

$ git show -M --name-status
commit 07d207f4ca1754c6b12bddb4918f42f02f37ccc3
Author: Adi Levin <alevin@aligntech.com>
Date:   Wed Mar 2 16:39:19 2016 +0200

    ttt

R100    assetsdb/assetsdb.iml   assetsdb2/assetsdb.iml
A       assetsdb2/mvnw
A       assetsdb2/mvnw.cmd
R100    assetsdb/pom.xml        assetsdb2/pom.xml
R100    assetsdb/src/main/java/com/aligntech/assetsdb/Asset.java        assetsdb2/src/main/java/com/aligntech/assetsdb/Asset.java
R100    assetsdb/src/main/java/com/aligntech/assetsdb/AssetsDBDemoApp.java      assetsdb2/src/main/java/com/aligntech/assetsdb/AssetsDBDemoApp.java
R100    assetsdb/src/main/java/com/aligntech/assetsdb/DynamodbAssetsApplication.java    assetsdb2/src/main/java/com/aligntech/assetsdb/DynamodbAssetsApplication.java
R100    assetsdb/src/main/java/com/aligntech/assetsdb/RandomString.java assetsdb2/src/main/java/com/aligntech/assetsdb/RandomString.java
R100    assetsdb/src/main/resources/application.properties      assetsdb2/src/main/resources/application.properties
A       assetsdb2/target/application.properties
A       assetsdb2/target/classes/application.properties
A       assetsdb2/target/classes/com/aligntech/assetsdb/Asset.class
A       assetsdb2/target/classes/com/aligntech/assetsdb/AssetsDBDemoApp.class

请注意,默认相似性指数为50%。如果您想对其进行控制,请仅将-M90%-M100%用于相同的文件。

接下来,您需要解析此输出并提取重命名文件列表,然后返回到基本提交,并创建一个新提交(下图中的“重命名”),其中这些文件仅重命名 - 没有任何其他变化。

最后,您需要获取Tmp1的工作目录,并在Renamed之上进行另一次提交,其中文件都被重命名和编辑。

enter image description here