msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。
1. Git全局配置:
$ git config --global user.name "Your Name" // 用户名 $ git config --global user.email "email@example.com" // 用户邮箱 $ git config --global core.autocrlf true // 中文编码 $ git config http.proxy http://proxy:port // 设置代理d $ git config git config http.postBuffer 524288000 // Post大小
2. 初始化仓库: git_init 命令把目录变成Git可以管理的仓库
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
3. 文件的添加与提交
// 可以添加多个文件 $ git add readme1.txt $ git add readme2.txt // 一次性提交到仓库 // 如果注释有中文时可以先执行这个命令 $ git config --global core.autocrlf true $ git commit -m "这里添加注释必需有" // 运行git status命令查看仓库的状态 $ git status
4.文件对比与历史记录
// 查看文件的修改 $ git diff readme.txt // 工作区和版本库里面最新版本的区别 $ git diff HEAD -- readme.tx // 查看仓库日志 $ git log // 简洁的输出日志 $ git log --pretty=oneline // 查询当前的状态 $ git status
// 重排之前的所有版本
$ git rebase –i[commit号]
master0(初始化后的版本) || v master1===test0==>test1===>test2 || v master2===>master3 1. 这个时候,通过第一种git reset的方式,可以将master分支的当前状态(master3) 回溯到master分支的master0、master1、master2状态。 也可已将test分支当前状态(test2) 回溯到test分支的test0、test1状态,以及test分支的父分支master的master0、 master1状态。 2. 那么。如果我要让test分支从test0到test2之间所有的改变都添加到master分支来, 使得master分支包含test分支的所有修改。这个时候就要用到git rebase了。 这个时候,git做了些什么呢? 先将test分支的代码checkout出来,作为工作目录 然后将master分支从test分支创建起的所有改变的补丁,依次打上。如果打补丁的过程没问题, rebase就搞定了.如果打补丁的时候出现了问题,就会提示你处理冲突。处理好了, 可以运行git rebase –continue继续直到完成 如果你不想处理,你还是有两个选择,一个是放弃rebase过程(运行git rebase –abort), 另一个是直接用test分支的取代当前分支的(git rebase –skip)
5. 版本回滚
// HEAD^上个版本 HEAD^^上上个版 HEAD~100上100个版本 $ git reset --hard HEAD^ // 回到指定的版本 $ git reset --hard 3628164 // 查看命令记录 $ git reflog
6.工作区和暂存区
$ git add: 文件添加进去,文件的修改添加到暂存区 $ git commit: 实际上就是把暂存区的所有内容提交到当前分支
7. 文件的修改
// 可以丢弃工作区的修改 // 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时 $ git checkout -- readme.txt // 把暂存区的修改撤销掉(unstage),重新放回工作区 // 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改 $ git reset HEAD readme.txt // 删除文件 $ git rm test.txt $ git commit -m "remove test.txt"
8. 分支管理
// 新建分支并切换 $ git checkout -b dev $ git branch dev $ git checkout dev // 用git branch命令查看当前分支 $ git branch // 分支合并 $ git checkout master $ git merge dev // 全并禁用“Fast forward”模式 $ git merge --no-ff -m "merge with no-ff" dev // 删除分支 $ git branch -d name // 强制删除分支 git branch -D feature-vulcan // 查看合并历史 $ git log --graph --pretty=oneline --abbrev-commit
【分支策略】 在实际开发中,我们应该按照几个基本原则进行分支管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时, 再把dev分支合并到master上,在master分支发布1.0版本; 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。 所以,团队合作的分支看起来就像这样
9.stash功能: 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
// 保存当前状态 $ git stash // 所有状态 $ git stash list // 恢复1,会删除stash内容 $ git stash pop // 恢复2,不会删除stash内容 $ git stash apply $ git stash drop $ git stash apply stash@{0}
10. 远程仓库
// 远程空白仓库本地push $ git remote add origin git@github.com:michaelliao/learngit.git // 克隆远程仓库 $ git clone git@github.com:michaelliao/gitskills.git [目录] // 修改远程仓库地址 git remote set-url origin git@github.com:michaelliao/learngit.git
11. 本地库与远程库
// 本地库推送远程库 $ git push origin master // 新建DEV库并推送 $ gia checkoub -b dev $ git push origin dev // 更新远程库到本地库 $ git pull // 删除远程库 $ git push origin --delete dev $ git push origin :dev
12. 本地标签与远程标签
// 创建标签 $ git tag v1.0 // 指定版本创建历史 $ git tag v0.9 6224937 // 加注释指定版本创建标签 $ git tag -a v0.1 -m "version 0.1 released" 3628164 // 查看标签记录 $ git tag // 查看标签详细 $ git show v0.9 // 删除标签 $ git tag -d v0.9 // 推送标签到远程库 $ git push origin v1.0 // 推送所有到远程库 $ git push origin --tags // 删除远程标签库 $ git push origin --delete v0.9 $ git push origin :refs/tags/v0.9
13. 忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件 【.gitignore文件】 # Windows: Thumbs.db ehthumbs.db Desktop.ini # Python: *.py[cod] *.so *.egg *.egg-info dist build # My configurations: db.ini deploy_key_rsa