用惯了svn,忽然转到git不免有点不适,写个笔记好好备忘总结一番。html
1、先看历史(imooc上的一个图):git
2、git与svngithub
GIT跟SVN同样有本身的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每一个开发人员从中心版本库/服务器上chect out代码后会在本身的机器上克隆一个本身的版本库。能够这样说,若是你被困在一个不能链接网络的地方时,就像在飞机上,地下室,电梯里等,你仍然可以提交文件,查看历史版本记录,建立项目分支,等。对一些人来讲,这好像没多大用处,但当你忽然遇到没有网络的环境时,这个将解决你的大麻烦。vim
3、那什么状况推荐使用svn缓存
SVN具备的悲观锁的功能,可以实现一个用户在编辑时对文件进行锁定,阻止多人同时编辑 一个文件。这一悲观锁的功能是 Git 所不具有的。对于以二进制文件 (Word文档、PPT演示稿) 为主的版本库,为避免多人同时编辑形成合并上的困难, 建议使用SVN作版本控制。bash
4、git工做原理服务器
这边文章介绍的不错 Git from the Bottom Up网络
5、git安装配置ssh
mac下实际无需安装直接在命令窗口输入git便可弹出安装确认,这种方式安装默认是安装到/usr/bin目录下,且不须要配置环境变量分布式
另外一种方式就是手动安装dmg包,须要配置环境变量
官网下载:http://git-scm.com/download/mac
vi ~/.bash_profile
export PATH="/usr/local/git/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:$PATH"
source ~/.bash_profile
重启一下终端,检查是否安装成功
git version
用户信息配置:
$ git config --global user.name "jager"
$ git config --global user.email jager@example.com
或 直接编辑配置文件:
vi ~/.gitconfig
[user]
name = jager
email = jager@example.com
[color]
ui = auto
branch = auto
diff = auto
status = auto
[color "branch"]
current = green
local = yellow
remote = red
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
[color "status"]
added = yellow
changed = green
untracked = cyan
[alias]
st = status
di = diff
ci = commit
co = checkout
br = branch
配置公私钥:
== 生成git密钥 == ssh-keygen -t rsa -C "jager@example.com" 秘钥名称填写:git_rsa 其余默认便可 == 配置git密钥 == vim ~/.ssh/config //增长如下内容,IdentityFile路径为你生成的git私钥文件路径 Host XXX User git IdentitiesOnly yes IdentityFile /Users/你的用户名/.ssh/git_rsa == 配置公钥 == 拷贝公钥 pbcopy < ~/.ssh/git_rsa.pub 添加到git管理平台 == FAQ == 最后一步没配置可能出现错误: Permission denied (publickey). fatal: Could not read from remote repository.
6、git经常使用命令
== git配置 == git config --list //查看当前git的配置,Git的设置文件为.gitconfig,它能够在用户主目录下(全局配置),也能够在项目目录下(项目配置) == 查看信息 == git log //查看提交记录 git status //查看修改状态 git diff //查看详细修改内容 git show //显示某次提交的内容 git branch //列出全部本地分支 git tag //列出全部tag git reflog //显示当前分支的最近几回提交 == 新建代码库 == git init //在当前目录新建一个Git代码库 git init [project-name] //新建一个目录,将其初始化为Git代码库 git clone [url] //下载一个项目和它的整个代码历史 == 增长/删除 == git add [file1] [file2] ... //添加指定文件到暂存区 git add [dir] //添加指定目录到暂存区,包括子目录 git add . //添加当前目录的全部文件到暂存区 git rm [file1] [file2] ... //删除工做区文件,而且将此次删除放入暂存区 git mv [file-original] [file-renamed] //更名文件,而且将这个更名放入暂存区 == 代码提交 == git commit -m [message] //代码提交到本地仓库 git commit [file1] [file2] ... -m [message] //提交指定文件到本地仓库 git commit -a //提交工做区自上次commit以后的变化,直接到仓库区 git commit -v //提交时显示全部diff信息 git commit --amend -m [message] //使用一次新的commit,替代上一次提交,若是代码没有任何新变化,则用来改写上一次commit的提交信息 == 分支管理 == git branch -r //列出全部远程分支 git branch -a //列出全部本地分支和远程分支 git branch [branch-name] //新建一个分支,但依然停留在当前分支 git checkout -b [branch] //新建一个分支,并切换到该分支 git checkout [branch-name] //切换到指定分支,并更新工做区 git checkout - //切换到上一个分支 git merge [branch] //合并指定分支到当前分支(如master) git branch -d [branch-name] //删除分支 git push origin --delete [branch-name] //删除远程分支 git branch -dr [remote/branch] //删除远程分支 == 远程同步 == git fetch [remote] //下载远程仓库的全部变更,到index git pull //更新本地仓库至最新改动,到workspace git remote -v //显示全部远程仓库 git remote show [remote] //显示某个远程仓库的信息 git remote add [shortname] [url] //增长一个新的远程仓库,并命名 git pull [remote] [branch] //取回远程仓库的变化,并与本地分支合并 git push origin master //推送至master分支 git push [remote] [branch] //上传本地指定分支到远程仓库 git push [remote] --force //强行推送当前分支到远程仓库,即便有冲突 git push [remote] --all //推送全部分支到远程仓库 == 撤销 == git reset [file] //重置暂存区的指定文件,与上一次commit保持一致,但工做区不变 git reset --hard //重置暂存区与工做区,与上一次commit保持一致 git checkout //从index恢复到workspace git checkout . //恢复暂存区的全部文件到工做区 git checkout -- files //文件从index恢复到workspace git checkout HEAD -- files //文件从local repository复制到workspace == 冲突解决 == git diff //对比workspace与index git diff HEAD //对于workspace与最后一次commit git diff <source_branch> <target_branch> //对比差别 git add <filename> //修改完冲突,须要add以标记合并成功
7、git使用流程规范【重要】
下面是ThoughtBot 的Git使用规范流程,推荐使用:
Create a local feature branch based off master. git checkout master git pull git checkout -b <branch-name> Rebase frequently to incorporate upstream changes. git fetch origin git rebase origin/master Resolve conflicts. When feature is complete and tests pass, stage the changes. git add --all When you've staged the changes, commit them. git status git commit --verbose Write a good commit message. Example format: Present-tense summary under 50 characters * More information about commit (under 72 characters). * More information about commit (under 72 characters). http://project.management-system.com/ticket/123 If you've created more than one commit, use git rebase -i origin/master Share your branch. git push origin <branch-name> Submit a GitHub pull request. Ask for a code review in the project's chat room. |
总结大体以下:
参考文档: