git 总结
之前只会git的常用操作,一旦遇到复杂的情况就要去搜索求助,总归不是长久之计,今天整理一下:
clone
常用:
$ git clone git://github.com/schacon/grit.git
不常用:
$ git clone git://github.com/schacon/grit.git mygrit
二者的差别就是 后者在克隆的时候,可以自己定义要新建的项目目录名称
commit
通常我们在git commit 操作之前,需要先执行git add ,但有时候这么做略显繁琐。Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤。
log
默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。看到了吗,每次更新都有一个 SHA-1 校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明。
git log 后面可以跟很多参数,戳我查看
如果log太多 想合并 可以用 git reset --soft HEAD~n
( n表示最近n次提交记录 )然后再统一提交。
撤消
这个是今天要记录的重点,也是工作中经常遇到的一些问题
修改最后一次提交
$ git commit --amend
有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 –amend 选项重新提交。
取消已经暂存的文件
如果已经用git add 加到了暂存区,该如何撤销呢? 使用git status 命令输出的时候,已经有了提示
(use "git reset HEAD <file>..." to unstage)
好吧,机智如你,肯定知道怎么做了。执行完这个命令之后 ,那个file就回到了之前已经修改未暂存的状态。
取消对文件的修改
如果觉得有些修改完全没必要,此时还没提交,该如何取消修改呢? 同样git status 命令给出了提示
(use "git checkout -- <file>..." to discard changes in working directory)
如果想取消多个文件 可以使用 git checkout .
这个命令是把之前的版本复制过来 重写修改过的文件,所以要慎重!
撤销单个文件的修改
如果不小心把一些不该改的xxx文件改掉了,而且还commit了,想撤销xxx文件,不影响其他已提交的文件,怎么办!
先用git log 查看xxx文件的修改记录,找出你需要回复的版本号
$ git log xxx文件路径
然后
然后 再次提交就OK拉 哈哈哈
删除本地分支
$ git branch -d "分支名"
删除远程分支
$ git push origin : 分支名
or
$ git push origin --delete 分支名
----------
ignore 不生效的问题
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
有次做一个前后端没有分离的项目,后端给我配环境时改了两个xml文件,提交时我想忽略这俩文件,写入.ignore文件之后 发现并没有忽略~ why?
原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'