这个是对 git 的收尾工作,里面记录了一些对于 git 很重要的知识,也有一些技巧。
.git的目录
这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
用户 git 配置文件
当前用户的Git配置文件放在用户主目录下的一个隐藏文件 .gitconfig 中:
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = your@email.com
仓库配置文件
每个仓库的Git配置文件都放在.git/config文件中。
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:github_name/origin_repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[alias]
last = log -1
.gitignore
如果,我们再上一步回撤的文件过多,未免工作量太多,并且,我们需要有些文件,是需要自动忽略,不上传的,比如log 文件,本地配置文件等。
有时候我们提交自己建的项目中想忽略某些文件夹可以建一个.gitignore目录,里面指定想要忽略的文件或目录,比如自己eclipse的项目可以设置忽略bin/和gen/目录,这样就表示把 bin 目录和 gen 目录下的所有文件都忽略掉,从而使用得它们不会加入到版本控制当中
如下图所示:
有的时候,我们添加了相应的参数,但是,并没有忽略,原因是 git忽略目录中,新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中,就算是在.gitignore中已经声明了忽略路径也是不起作用的,这时候我们就应该先把本地缓存删除,然后再进行git的push,这样就不会出现忽略的文件了。
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
上传时机
这件事我和陈哥讨论过,究竟什么时候将本地代码 push 上去,陈哥给的建议是,只要有一点有效的修改,就要提交。关于这点陈哥的解释如下:如果时间拖得过长,那么版本库就会变得越来越大,而你的本地代码就会和版本库差别的越来越大,可能就会导致冲突,或者目录的变更,对维护产生很大的影响。
查看状态
git status
每次执行完一个 git 命令,最好都执行一遍这个命令。
查看之前的版本内容
我们使用 git log 命令来查看过往版本的内容。
然后,我们复制想要看的版本的 commit,然后执行
git show ***
git stash
紧急BUG修复
当你在写代码的时候,突然,线上出现了一个紧急的BUG,但是,你又不能停下你手中的工作,那么你可以执行下面的命令
git stash
让 commit 指向你的上一个commit,这样的话,你可以直接先修改BUG,然后提交,提交的是你修改BUG的代码,当你,修改完成后,可以再次执行
git stash pop
这样,你又回到了之前的工作状态。
stash 其他
git stash save “修改的信息"
给 stash 进行标注。
git stash list
列出 stash 的列表。
git stash clear
清空 stash 的列表。
指定提出 stash
git stash list
stash@{0}: On order-master-bugfix: 22222
stash@{1}: On order-master-bugfix: 22222
方法 1
git stash apply stash@{1}
git stash apply stash@{id} 命令则会继续保存stash id。所以,我们还需要删除多余的 stash
git stash drop stash@{id}
就可以回到保存的版本了。
方法 2
git stash pop stash@{int}
git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除。
git diff
比较工作区与暂存区
git diff 不加参数即默认比较工作区与暂存区
比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
git diff --cached [<path>...]
比较工作区与最新本地版本库
git diff HEAD [<path>...] 如果HEAD指向的是master分支,那么HEAD还可以换成master
比较工作区与指定commit-id的差异
git diff commit-id [<path>...]
比较暂存区与指定commit-id的差异
git diff --cached [<commit-id>] [<path>...]
比较两个commit-id之间的差异
git diff [<commit-id>] [<commit-id>]