[Git痛点讲解 : 不断完善中]

来源:互联网 发布:淘宝客推广的入口 编辑:程序博客网 时间:2024/06/05 11:39

Git是一款可记录历史,回到过去的分布式版本管理工具~

普及Git基本知识:http://git.oschina.net/progit/


1.如果无意删除了远程分支和本地分支应该如何回到过去版本?

答:

在使用Git的过程中,有时可能会有一些误操作,比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支,结果造成本地(远程)的分支或某些commit丢失。这时,我们可以通过reflog来进行恢复,前提是丢失的分支或commit信息没有被git gc(CD30天)清除。一般情况下,gc对那些无用的object会保留很长时间后才清除的。reflog是git提供的一个内部工具,用于记录对git仓库进行的各种操作,可以使用git reflog或git log -g命令来看到所有的操作日志。

本地仓库回滚的过程很简单:

1.1 通过 git log -g 命令来找到我们需要恢复的信息对应的commit_id,可以通过提交的 版本ID,注备,时间,日期来辨别(黑色处为个人隐私)。

1.2 通过 git branch reserve_branch commit_id 来建立一个基于commit_id的新的分支(分支名可自定义)。

1.3 这样丢失的东西会恢复到reserve_branch 分支上了,然后切换到reserve_branch分支,一会文件就被开发工具检查到,可以用git push origin HEAD -u将本地分支推送到远程~

参考地址:http://blog.csdn.net/losophy/article/details/8932157

2..gitignore 失效,不能进行有效过滤,怎么办?

答:

在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件.
如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交(蓝色文件为加入了版本控制的,灰色为.gitgnore过滤后的不可添加版本控制):

不要误解了!!! .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。

 #1.清理本地缓存(改变成未被追踪状态)

$ git rm -r –cached .

 #2.把工作时的所有变化提交到暂存区 : 包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。(会通过 .gitgnore 过滤)

$ git add .

 #3.将缓存区更新到本地仓库

$ git commit -m ‘update .gitignore’