通过git

时间:2017-09-13 16:31:03

标签: linux git file version-control

我的情况

我想获取新的和修改过的文件,然后执行compress之类的操作。出于对efficacy的考虑,我不能每次都搜索所有文件。因此git出现在我的脑海中。

我知道git status可以帮助我获取所有已更改的文件,然后我可以自己过滤它们。但是有一个问题。让我举个例子。

我有一个名为text.txt的文件,其内容为Hello。然后我将其内容修改为Hello World。现在我执行git add test.txt。最后,我将其内容恢复到Hello

  • 如果这次我也执行了git add test.txt,那么git status就什么都没给我了。这是对的,因为事实上文件没有被修改。
  • 如果这次我没有,git status显示
  

要提交的更改:       修改:test.txt

     

未提交提交的更改:       修改:test.txt

我的问题

有没有办法通过git来做这件事?

修改

也许git在这种情况下无效。那还有其他方法吗?

3 个答案:

答案 0 :(得分:0)

使用git diff来显示提交,工作文件夹等之间的差异

供参考:

git diff documentation

Excellent answer to related question here on SO that goes into more detail

答案 1 :(得分:0)

我不完全确定您的需求,但如果您只想要修改文件的紧凑列表,可以尝试:

  

git status -s

将返回:

  

MM text.txt

第一个" M"代表"要做出的改变",秒" M"代表"未提交的变更#34;。

答案 2 :(得分:0)

直接答案是否定的。

git跟踪未提交更改的机制如下:

enter image description here

  

Git有三个主要状态,您的文件可以驻留在:committed,   修改,上演。已提交意味着数据已安全存储   在您的本地数据库中。修改意味着您已更改文件   但尚未将其提交到您的数据库。分阶段意味着你   已在当前版本中标记了已修改的文件以进入您的   下一次提交快照。

更多详细信息,您可以参考Git Basics

未提交的提交更改:列出已修改状态的文件。

要提交的更改:列出已暂存并等待将暂存文件记录到下一次提交的文件。

  • 对于您尝试的第二个操作(直接使用git status),这是由于您将test.txt的连接更改为Hello World并首次暂存此文件而导致的。因此状态为Changes to be committed: modified: test.txt。当您更改内容test.txtHello)时,test.txt Changes not staged for commit: modified: test.txt还有一个已修改状态(与工作目录比较分阶段版本)。

    < / LI>
  • 对于您尝试的第一个操作(第二次使用git add test.txt),当您第二次暂存更改的内容Hello时,git可以检测到之间没有更改阶段版本和当前提交的版本(在.git文件夹中比较分阶段版本和当前版本)。所以git会显示nothing to commit, working tree clea n。

单词,如果您在此期间未提交的情况下多次更改文件,git将不会跟踪未提交的更改。