当前位置:和仁网 > 其它 > 正文

git 为什么有两个 autocrlf

2022-04-19 39

1.git的add,是一个容易引起疑问的命令。在subversion中的svnadd动作是将某个文件加入版本控制,而gitadd的意义完全不同。同时,gitdiff--cached是比较stage的文件的差异的,也是一个不直观的命令。github2008年的blog中,也提到,容易引起混淆:thingslikemakinguseoftheterm‘stage’forthingsthathappenintheindex(suchasusing‘gitdiff—staged’insteadof‘gitdiff—cached’)isbeingworkedon.I’mexcitedthatstagingfilesmaysoonbedonevia‘gitstage’rather-than/in-addition-to‘gitadd’.Thisisnicefornewuserswhooftenhaveahardtimeseeingwhyyouhavetokeep‘gitadd’ingtostageyourchanges.事实上,在git的后续版本中,就做了两个修改:gitstage作为gitadd的一个同义词gitdiff--staged作为gitdiff--cached的相同命令为了容易理解,推荐大家使用gitstage和gitdiff--staged这两个命令,而gitadd和gitdiff--cached这两个命令,仅仅为了保持和以前的兼容做保留。2.增加stage的带来的好处是什么?主要有两个好处,一个是分批、分阶段递交,一个是进行快照,便于回退2.1分批递交,降低commit的颗粒度比如,你修改了a.py,b.py,c.py,d.py,其中a.py和c.py是一个功能相关修改,b.py,d.py属于另外一个功能相关修改。那么你就可以采用:gitstagea.pyc.pygitcommit-m"function1"gitstageb.pyd.pygitcommit-m"function2"2.2分阶段递交比如,你修改了文件hello.py,修改了一些以后,做了gitstageheello.py动作,相当于对当前的hello.py做了一个快照,然后又做了一些修改,这时候,如果直接采用gitcommit递交,则只会对第一次的快照进行递交,当前内容还保存在working工作区。当前的最新修改,则需要再做一次gitstage,才能递交。这中间细微的差别,请参见:4.reset和checkout的区别当文件加入了stage区以后,如果要从stage删除,则使用reset,此时工作区的文件不做任何修改,比如:gitresethello.py这个命令就是gitstagehello.py的反操作。当文件加入了stage区以后,后来又做了一些修改,这时发现后面的修改有问题,想回退到stage的状态,使用checkout命令:gitcheckouthello.py5.可以使用gitcommit-a命令,跳过gitstage这个命令,直接递交6.最佳实践:做了阶段性修改,但是还不能做一次递交,这时先gitstage一下如果有问题,可以随时checkout回退递交之前,使用gitstatus,gitdiffHEAD仔细查看是否需要的递交gitcommit-a,保证递交了所有内容
本周热门