这篇博文用来记录我使用git的体会感悟
删除文件:
git add test.txt
git commit -m "test.txt"
rm test.txt 那么会直接在工作区(也就是我们常说的文件夹)将该文件删除,但是在版本库中,你的test.txt文件并没有被删除,此时用
git checkout -- test.txt 是可以回复该文件的
但是如果在此之前你并没有把该文件add到缓冲区中(也就是使用git add 命令)或者 commit到版本库中(也就是使用git commit),对不起,无力回天。
复杂点的情况 如果现在你的暂存区和版本库中都有一个同名文件(暂存区中的同名文件还没有commit),那么此时你此时rm test.txt 然后checkout返回的会优先是暂存区中的文件而不是版本库中的文件
如果你是用的 git rm 则会将工作空间 版本库中都删掉 git reset --hard
http://stackoverflow.com/questions/2125710/how-to-revert-a-git-rm-r
一、放弃对git管理的文件修改
条件:bb.txt文件已经被git管理
过程:发现bb.txt文件被修改了,发现改了之后不是自己想要的结果
目的:想恢复到没有被修改的状态
解决办法:
git checkout bb.txt
git放弃对当前文件夹的所有文件的修改?
git checkout .
二、对没有被git管理的文件修改
条件:cc.txt文件没有被git管理
过程:添加的文件太多太紊乱了,
目的:想直接回复到某个版本
解决办法:
git reset --hard {版本号}
git reset 版本回退 mixed soft hard
http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html
出这个错误的原因是远程和本地都有差异 远端有个readme 在本地没有,所以要先git pull一下,在git push
git pull origin master(分支)
现在我的理解就是本地文件目录(工作目录),缓存区,和git仓库。缓存区是公用的,(任何一个分支上git add 文件到缓存区,在任何其他分支用git ls-files都可以看见刚刚被其他分支add的文件,当然在任何一个分支上移除缓存中的这个文件,也都会反应在其他分支中)可以用git status命令来查看哪些文件没有被跟踪,另外git add . 这个命令好像不能用了 还是用git add --all来添加所有文件吧!
当然如果我们如果不小心把一些文件提交到了缓存区,想把他们删除。那么我们可以使用git rm --cache <文件名>命令来,把误加入缓存区的文件删除,当然不会删除工作目录中的文件,然后使用git status命令可以看到,刚刚那个文件已经提示未被跟踪了。(猜想仓库中的不会被删除 查看仓库中文件的命令有误,用git log <文件名>可以查看这个文件是否在仓库中)
删除暂存区和工作区的文 git rm -f 文件名。工作区的文件也被删除了。
如果想删除已经提交到仓库中的文件那么我们就需要使用git reset命令
这个时候,我们必须撤销版本库的修改才能解决问题!
git reset有三个选项,--hard、--mixed、--soft。
//仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
git reset --soft 版本库ID
//仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
git reset --mixed 版本库ID
//彻底将工作区、暂存区和版本库记录恢复到指定的版本库 git reset --hard 版本库ID
关于文件合并
git merge <> <分知名> 是把别的仓库中的内容合并到当前仓库,如果当前仓库中的同一个文件有了更改,其他分支同一个文件也有了更改,那么合并就会出错,这个时候就需要手动解决冲突。因为不知道
该以哪个更改的为主。
git ls-files 来查看缓冲区中提交了哪些文件
git diff --cached 用来查看前后两次 git add 后的变化 原来缓存区中的文件也是要git add后 用git diff --cached才会有变化的
当我新建分支时弹出如下错误
fatal: Not a valid object name: 'master'.
想新建立一个分支时出现这错误。
后来发现,要先commit一次才会真正建立master分支,此时就可以新建立分支了。。
在没有commit之前,如果使用git checkout -b <分支名> 来创建切换到分支,实际上这个分支是没有被创建的 所以用git checkout是不能进行切换的
git add 命令
git add 命令添加所有改动内容
git add xx
命令可以将xx文件添加到暂存区,如果有很多改动可以通过
git add -A .
来一次添加所有改变的文件。注意 -A
选项后面还有一个句点。
git add -A
表示添加所有内容,
git add .
表示添加新文件和编辑过的文件不包括删除的文件;
git add -u
表示添加编辑或者删除的文件,不包括新添加的文件。
.gitignore
该文件用来指定哪些文件不需要被管理,通常包裹一些缓存文件等等。我们直接在windows下新建.gitignore文件,处于系统的自我保护会阻止这一行为。我们可以在git控制台中使用
touch .gitignore来新建。
如果我们文件已经被管理,此时要想忽略该文件,必须先通过git rm --cached <文件名>先从缓存区中移除该文件。