0

首先,对于如此令人困惑的讨厌标题感到抱歉,我真的找不到更好的方式来描述这个(如果建议发布任何更改,我将不胜感激)。

问题

我同步了一个 github 存储库。并且还根据我的需要修改了里面的一些文件和代码。但是如果我想重新同步并将我的树更新为最新的提交。

我的更改会被覆盖吗?
还是 repo 会简单地忽略修改过的文件并转移到其他文件?
还是会有修补过程(我认为不会出现这种情况,因为自动修补出现问题的可能性很高)?

我的猜测是它会跳过修改过的文件。而且我可能需要从 repo 手动获取新的提交。但是如何确定哪些已修改的文件有新的提交呢?我只是想确定它,然后可能手动获取并手动修改它们。

澄清:

考虑我修改的名为“abc”和“def”的文件。回购所有者用许多新的提交更新了他的回购。我运行 repo sync 并将所有文件同步到较新的提交,除了我修改的那些。现在我如何确定回购所有者更新的文件是否也包括“abc”和/或“def”(假设我自己修改了很多文件,所以我不能手动检查每个文件是否有新的提交)?

我不想查看我修改了哪些文件或包含新提交的文件的完整列表,我只想查看我修改的文件是否有新提交。

有没有这种可能的方法?

我确实知道如何确定使用 `git status 更改的文件,

但是我要如何检查这些更改的文件是否有任何新的提交。

4

2 回答 2

1

运行时repo sync,Repo 将 rebase 任何未发布的主题分支(即您尚未使用 上传到 Gerrit 的分支repo upload)。

还是会有修补过程(我认为不会出现这种情况,因为自动修补出现问题的可能性很高)?

Git 会尝试,但如果存在无法自行解决的冲突,您必须介入并提供帮助。

考虑我修改的名为“abc”和“def”的文件。回购所有者用许多新的提交更新了他的回购。我运行 repo sync 并将所有文件同步到较新的提交,除了我修改的那些。

不,Repo 会重新设置您的分支(并更新/合并所有文件),或者它什么都不做,这取决于您需要从上游重新设置或合并。Git 从不进行部分更新。

我不想查看我修改了哪些文件或包含新提交的文件的完整列表,我只想查看我修改的文件是否有新提交。

我认为您提出了错误的问题,但是可以肯定的是,您可以列出修改特定文件集的提交或比较两个提交并仅显示特定文件集中的差异。两者都git diff接受git log一个或多个要限制输出的文件的路径。要查找可用于git ls-files -mo获取工作区中的脏文件和未跟踪文件、git diff-tree --name-only -r HEAD~..HEAD获取最近提交修改的文件等的文件。

综上所述,以下命令从上游获取最新状态并显示新提交 ( git log HEAD..origin/master),这些提交 () 涉及自上游 () 上次更新以来您自己在当前分支上修改的文件git diff-tree --name-only -r origin/master..HEAD

git fetch
git log HEAD..origin/master -- $(git diff-tree --name-only -r origin/master..HEAD)

假定一个类 Unix shell。在 Windows 上,情况可能会有所不同。

于 2015-05-20T10:59:38.843 回答
0

您可以使用 git hook 来跟踪文件列表。
在你的post-receive钩子中搜索给定的文件并做你需要做的事情。

另一种选择是使用以下标志手动跟踪它
git log --follow <path>,它将打印出在每次提交中对给定文件所做的更改列表

于 2015-05-20T08:40:20.670 回答