如何确定我修改的文件是否在 github 上有新的提交?
How to determine if files I modified have new commits on github?
首先,对于这样一个令人困惑的讨厌标题,我深表歉意,我真的找不到更好的方式来描述它(希望对 post 提出的任何更改建议)。
问题
我同步了一个 github 存储库。并且还根据自己的需要修改了里面的一些文件和代码。但是如果我想重新同步并将我的树更新到最新的提交。
will my changes be overwritten?
Or will repo simply ignore modified files and move on to other files?
Or will there be patching process (I dont think this would be case since chances of problems with auto-patching are quite high)?
我猜它会跳过修改过的文件。而且我可能需要手动从回购中获取新的提交。但是如何确定哪些被修改的文件有新的提交呢?我只是想确定一下,然后可能会手动获取并手动修改它们。
澄清一下:
考虑我修改过的名为“abc”和“def”的文件。
回购所有者用许多新的提交更新了他的回购。
我 运行 repo sync 并将所有文件同步到较新的提交,除了我修改的那些。现在我如何确定 repo 所有者更新的文件是否也包含“abc”and/or“def”(假设我自己修改了很多文件,所以我无法手动检查每个文件是否有新提交)?
我不想查看我修改了哪些文件或包含新提交的文件的完整列表,我只想查看我修改的文件是否有新提交。
Is there any such possible way?
我知道如何使用 `git 状态,
来确定已更改的文件
but how do I want to check if those changed files have any new commits.
您可以使用 git 挂钩来跟踪文件列表。
在您的 post-receive
钩子中搜索给定文件并执行您需要执行的操作。
另一种选择是使用跟随标志手动跟踪它
git log --follow <path>
,它将打印出每次提交时对给定文件所做的更改列表
当 运行 repo sync
时,Repo 将变基任何未发布的主题分支(即您尚未使用 repo upload
上传到 Gerrit 的分支)。
Or will there be patching process (I dont think this would be case since chances of problems with auto-patching are quite high)?
Git 会尝试,但如果有冲突无法自行解决,您必须介入并提供帮助。
Consider files named "abc" and "def" which I modified. The repo owner updated his repo with a lot of new commits. I ran repo sync and it synced all files to newer commits except those I modified.
没有。 Repo rebase 你的分支(和 updates/merges all 文件)或者它什么都不做,这取决于你是否需要从上游 rebase 或合并。 Git 从不进行部分更新。
I dont want to see what files I have modified or a complete list of files with new commits, I just want to see if the files that I modified have new commits or not.
我认为您问错了问题,但是可以肯定的是,您可以列出修改特定文件集的提交或比较两个提交并仅显示特定文件集的差异。 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 上,情况可能会有所不同。
首先,对于这样一个令人困惑的讨厌标题,我深表歉意,我真的找不到更好的方式来描述它(希望对 post 提出的任何更改建议)。
问题
我同步了一个 github 存储库。并且还根据自己的需要修改了里面的一些文件和代码。但是如果我想重新同步并将我的树更新到最新的提交。
will my changes be overwritten?
Or will repo simply ignore modified files and move on to other files?
Or will there be patching process (I dont think this would be case since chances of problems with auto-patching are quite high)?
我猜它会跳过修改过的文件。而且我可能需要手动从回购中获取新的提交。但是如何确定哪些被修改的文件有新的提交呢?我只是想确定一下,然后可能会手动获取并手动修改它们。
澄清一下:
考虑我修改过的名为“abc”和“def”的文件。 回购所有者用许多新的提交更新了他的回购。 我 运行 repo sync 并将所有文件同步到较新的提交,除了我修改的那些。现在我如何确定 repo 所有者更新的文件是否也包含“abc”and/or“def”(假设我自己修改了很多文件,所以我无法手动检查每个文件是否有新提交)?
我不想查看我修改了哪些文件或包含新提交的文件的完整列表,我只想查看我修改的文件是否有新提交。
Is there any such possible way?
我知道如何使用 `git 状态,
来确定已更改的文件but how do I want to check if those changed files have any new commits.
您可以使用 git 挂钩来跟踪文件列表。
在您的 post-receive
钩子中搜索给定文件并执行您需要执行的操作。
另一种选择是使用跟随标志手动跟踪它
git log --follow <path>
,它将打印出每次提交时对给定文件所做的更改列表
当 运行 repo sync
时,Repo 将变基任何未发布的主题分支(即您尚未使用 repo upload
上传到 Gerrit 的分支)。
Or will there be patching process (I dont think this would be case since chances of problems with auto-patching are quite high)?
Git 会尝试,但如果有冲突无法自行解决,您必须介入并提供帮助。
Consider files named "abc" and "def" which I modified. The repo owner updated his repo with a lot of new commits. I ran repo sync and it synced all files to newer commits except those I modified.
没有。 Repo rebase 你的分支(和 updates/merges all 文件)或者它什么都不做,这取决于你是否需要从上游 rebase 或合并。 Git 从不进行部分更新。
I dont want to see what files I have modified or a complete list of files with new commits, I just want to see if the files that I modified have new commits or not.
我认为您问错了问题,但是可以肯定的是,您可以列出修改特定文件集的提交或比较两个提交并仅显示特定文件集的差异。 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 上,情况可能会有所不同。