如何确定我修改的文件是否在github上有新的提交?

时间:2015-05-20 08:33:12

标签: git repo

首先,对于这种令人困惑的讨厌的标题感到抱歉,我真的无法找到一种更好的方式来描述这一点(希望发表任何修改建议)。

问题

我同步了一个github回购。并根据我的需要修改了一些文件和代码。但是,如果我想重新同步并将我的树更新为最新提交。

  

我的更改会被覆盖吗?   或者repo只是忽略修改过的文件并转移到其他文件?   或者是否会有修补过程(我不认为这可能是因为自动修补问题的可能性很高)?

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

澄清:

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

我不想看到我修改过的文件或带有新提交的文件的完整列表,我只是想看看我修改过的文件是否有新的提交。

  

有没有这样的可行方式?

我知道如何使用`git status,

确定更改的文件
  

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

2 个答案:

答案 0 :(得分:1)

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

  

或者是否会有修补过程(我不认为这可能是因为自动修补问题的可能性非常高)?

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

  

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

没有。 Repo rebase你的分支(以及更新/合并所有文件)或者它没有做任何事情,这取决于您需要从上游进行rebase或merge。 Git永远不会进行部分更新。

  

我不想看到我修改过的文件或带有新提交的文件的完整列表,我只是想看看我修改过的文件是否有新的提交。

我认为你问的是错误的问题,但是可以肯定,你可以列出修改特定文件集的提交或比较两个提交,只显示特定文件集中的差异。 git diffgit 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上,事情看起来可能不同。

答案 1 :(得分:0)

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

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