首先git是一个版本控制工具,相似于SVNhtml
笔记包括两部分,git本地版本控制和git远程协助linux
一.Git本地版本控制git
以git windows版本msysgit为例,下载地址http://msysgit.github.io/github
1.打开git bash这是基于MINGW32的一个模拟linux bash终端windows
、bash
2.将目录切换到C盘根目录,建立一个文件夹名为gitproj服务器
3.在该目录下执行命令 git init初始化该文件目录为git库 将生产一个.git后缀的文件app
不要改动或者删除这个文件,这个文件将包括整个git版本库的全部信息工具
4.好,如今咱们开始进行版本控制,在当前目录下新建一个vpoetgit.txt测试
里面添加一行内容"this is first line"
5.使用git status查看下当前git库的状态
Untracked files说明还未add和commit
6.咱们首先add 一次
Changes to be committed说明虽然文件以及添加到库中可是仍然未提交
7.咱们commit一次看看
working directory clean 说明你的工做目录是干净的全部文件和修改都已经添加和提交了
8.关于add和commit理解,要先理解git主分区,暂存区,工做区的概念。工做区是指还未add以前的
文件,暂存区指add以后的文件,而commit是指将暂存区的文件提交到主分区中。
因此通常的步骤是,咱们在git工做目录下建立的新文件或者拷贝的文件是不被git管理的,须要add到
暂存区后,git才会跟踪这些文件的变化,当暂存区修改完成就直接能够commit主分区了。
其余一些命令(转自http://www.cnblogs.com/cspku/articles/Git_cmds.html):
查看、添加、提交、删除、找回,重置修改文件
git help <command> # 显示command的help
git show # 显示某次提交的内容 git show $id
git co -- <file> # 抛弃工做区修改
git co . # 抛弃工做区修改
git add <file> # 将工做文件修改提交到本地暂存区
git add . # 将全部修改过的工做文件提交暂存区
git rm <file> # 从版本库中删除文件
git rm <file> --cached # 从版本库中删除文件,但不删除文件
git reset <file> # 从暂存区恢复到工做文件
git reset -- . # 从暂存区恢复到工做文件
git reset --hard # 恢复最近一次提交过的状态,即放弃上次提交后的全部本次修改
git ci <file> git ci . git ci -a # 将git add, git rm和git ci等操做都合并在一块儿作 git ci -am "some comments"
git ci --amend # 修改最后一次提交记录
git revert <$id> # 恢复某次提交的状态,恢复动做自己也建立次提交对象
git revert HEAD # 恢复最后一次提交的状态
查看文件diff
git diff <file> # 比较当前文件和暂存区文件差别 git diff
git diff <id1><id2> # 比较两次提交之间的差别
git diff <branch1>..<branch2> # 在两个分支之间比较
git diff --staged # 比较暂存区和版本库差别
git diff --cached # 比较暂存区和版本库差别
git diff --stat # 仅仅比较统计信息
查看提交记录
git log git log <file> # 查看该文件每次提交记录
git log -p <file> # 查看每次详细修改内容的diff
git log -p -2 # 查看最近两次详细修改内容的diff
git log --stat #查看提交统计信息
tig
Mac上可使用tig代替diff和log,brew install tig
Git 本地分支管理
查看、切换、建立和删除分支
git br -r # 查看远程分支
git br <new_branch> # 建立新的分支
git br -v # 查看各个分支最后提交信息
git br --merged # 查看已经被合并到当前分支的分支
git br --no-merged # 查看还没有被合并到当前分支的分支
git co <branch> # 切换到某个分支
git co -b <new_branch> # 建立新的分支,而且切换过去
git co -b <new_branch> <branch> # 基于branch建立新的new_branch
git co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其余分支会自动删除
git co $id -b <new_branch> # 把某次历史提交记录checkout出来,建立成一个分支
git br -d <branch> # 删除某个分支
git br -D <branch> # 强制删除某个分支 (未被合并的分支被删除的时候须要强制)
分支合并和rebase
git merge <branch> # 将branch分支合并到当前分支
git merge origin/master --no-ff # 不要Fast-Foward合并,这样能够生成merge提交
git rebase master <branch> # 将master rebase到branch,至关于: git co <branch> && git rebase master && git co master && git merge <branch>
Git补丁管理(方便在多台机器上开发同步时用)
git diff > ../sync.patch # 生成补丁
git apply ../sync.patch # 打补丁
git apply --check ../sync.patch #测试补丁可否成功
Git暂存管理
git stash # 暂存
git stash list # 列全部stash
git stash apply # 恢复暂存的内容
git stash drop # 删除暂存区
Git远程分支管理
git pull # 抓取远程仓库全部分支更新并合并到本地
git pull --no-ff # 抓取远程仓库全部分支更新并合并到本地,不要快进合并
git fetch origin # 抓取远程仓库更新
git merge origin/master # 将远程主分支合并到本地当前分支
git co --track origin/branch # 跟踪某个远程分支建立相应的本地分支
git co -b <local_branch> origin/<remote_branch> # 基于远程分支建立本地分支,功能同上
git push # push全部分支
git push origin master # 将本地主分支推到远程主分支
git push -u origin master # 将本地主分支推到远程(如无远程主分支则建立,用于初始化远程仓库)
git push origin <local_branch> # 建立远程分支, origin是远程仓库名
git push origin <local_branch>:<remote_branch> # 建立远程分支
git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),而后再push删除远程分支
Git远程仓库管理
git remote -v # 查看远程服务器地址和仓库名称
git remote show origin # 查看远程服务器仓库状态
git remote add origin git@ github:robbin/robbin_site.git # 添加远程仓库地址
git remote set-url origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm <repository> # 删除远程仓库
建立远程仓库
git clone --bare robbin_site robbin_site.git # 用带版本的项目建立纯版本仓库
scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上
mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器建立纯仓库
git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址
git push -u origin master # 客户端首次提交
git push -u origin develop # 首次将本地develop分支提交到远程develop分支,而且track
git remote set-head origin master # 设置远程仓库的HEAD指向master分支
也能够命令设置跟踪远程库和本地库
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop