git版本控制:只支持文本文本改动,如txt文件、网页、程序代码等不支持图片、视频、word等二进制文件。并且强烈建议使用标准UTF-8 编码。并且不要使用window的记事本来编辑文本,建议用notepad++或sublime下设置utf-8再进行编码。


  创建版本库:(0)cd E:切换到E盘根目录。(1)mkdir learngit:创建名为learngit文件夹 。(2)cd learngit:切换到此文件夹。(3)git init:将此目录变成git管理用仓库。(4)在目录下新建一个readme.txt。(5)git add readme.txt:文件添加到仓库。(6)git commit -"wrote a readme file":文件提交到仓库,-m后为提交说明,方便历史记录里面发生改进信息。

  版本管理:(1)修改readme.txt:添加内容。(2)git status:查看哪些文件被修改和需要提交。(3)git diff:查看具体的修改内容。(4)git add readme.txt:文件添加到仓库 (5)git commit -m "add something"文件提交到仓库。(6)git status:验证无修改过或提交的文件。

  历史记录:(1)git log:显示从最近到最远的提交日志,添加参数--pretty=online可以简化输出,确定回退的哪个版本。(2)git reset --hard HEAD^:返回上一个版本,HEAD^^上上个版本、HEAD~100前第一百个版本。(3)cat readme.txt:查看内容变更。(4)git reset --hard 最新版本commit id前几位:返回最新版本。(5)git reflog:查询曾使用过的每一条命令,确定回到未来哪个版本。

  工作区暂存区:上面提到的learngit文件夹就是一个暂存区。文件夹的.git文件是版本库,包含暂存区和当前分支。第一步是用git add把需要提交的文件修改通通放到暂存区文;
    第二步是用git commit一次性提交暂存区的所有修改。
    撤销修改:(1)git checkout --readme.txt:撤销readme.txt在工作区的修改。(2)git reset HEAD readme.txt:撤销read.txt在暂存区的修改。
    删除文件:(1)git rm test.txt:删除文件。 (2)git checkout -- test.txt:如果错删可以从版本库中恢复。(3)git commit -m "remove test.txt":确定从版本库中删除

  git初始化:参考http://www.cnblogs.com/gbyukg/archive/2011/10/12/2208915.html

  添加远程库:(1)git remote add origin git@github.com:"github用户名"/库名.git:关联当前本地库和github的远程库 。git push -u origin master:本地库内容推送到远程库 。(3)git push origin master:本地master分支的最新修改推送至github。

  从远程库克隆:(1)git clone git@github.com:"github用户名"/库名.git: 远程库克隆到本地库。cd 库名 ;ls :两条命令查看克隆库的文件列表。

  创建与合并分支:(1)git checkout -b dev;创建并切换到dev分支。(2)git branch:查看所有分支,当前分支前有*号。(3) git add readme.txt;git commit -m "branch test":readme.txt上修改并且提交到分支。(4)git checkout master:切换回master分支。(5)git merge dev:dev分支工作合并到master分支上。(6)git branch -d dev:删除dev分支 (7)git branch:验证是否删除。

  解决冲突:(1)git checkout -b featurel:创建并切换到新分支 (2)git add readme.txt;git commit -m "add simple":修改并提交 。(3)git checkout master:切换到master分支。 (4)git add readme.txt;git commit -m "&simple":修改并提交。 (5)git merge featural:合并操作会产生冲突。(6)git status:查询冲突的文件。(7)直接查看并修改readme.txt文件,再次add与commit操作。(8)git log --graph --pretty=online --abbrev-commit:带参数的log可以看到分支的合并情况。(9)git branch -d feature1:删除feature1分支

  分支管理策略:(1)git checkout -b dev:切换到dev分支。 (2)git add readme.txt, git commit -m "add merge"  :修改readme.txt并提交一个新的commit。 (3)git checkout master :切换回master 。(4)git merge --no--ff -m "merge with no-ff" dev :准备合并dev分支,--no-ff参数表示禁用Fast forwad,因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。(5)git log --graph --pretty=online --abbrev--commit:查看分支历史。  实际开发中需要按照几个基本原则进行分支管理:master分支仅用来发布新版本,干活都在dev版本中,每个人都有自己的分支版本,时不时向dev中合并就行了。

  Bug分支:(1)git stash :存储当前工作现场“非提交” 。(2)git checkout master,git checkout -b issu-101:修复master分支前创建临时分支 。(3)git add readme.txt,git commit -m "fix bug 101":修复bug提交 。(4)git checkout master,git merge --no-ff -m "merged bug fix 101" issue-101,git branch -d issue-101:切换到master分支完成合并,最后删除issue-101 。(5)git checkout dev,git stash list,git stash pop:回到最初的工作分支,调回存储的工作现场。

  Feature分支:(1)git checkout -b feature-vulcan:切换到分支。 (2)git add vulacn.py,git status:开发完毕。 (3)git checkout dev 切会dev准备合并。 (4)git branch -d feature-vulcan :强行删除未合并的分支。

  多人协作:(1)git remote,git remote -v:查看远程库的信息。  (2)git push origi master,git push origin dev :推送分支。 (3)git checkout -b dev origin/dev,git commit -m "add/user/bin/env":创建远程origin的dev到本地,把dev分支的修改push到远程。(4)git pull:将最新提交的origin/dev抓下来,在后在本地合并,解决冲突,再推送。(5)git branch --set-upstream dev origin/dev:git pull失败的原因就是没有制定本地dev分支与远程origin/dev分支的链接。(6)git commit -m "merge fix hello.py":手动解决冲突后再提交再push。

  创建标签:(1)git branch,git checkout master:查看并切换到主分支(2)git tag v1.0:给当前分支打一个标签v1.0。   (3)git tag:查看所有标签,结果按字母排序,而不是时间排序。   (4)git log --pretty=online -abbrev-commit,git tag v0.9 commitid前几位:查看commitid并为commit时的版本打上标签。 (5)git tag -a v0.1 -m "version 0.1 released" 3453234 :创建带有说明的标签,-a制定标签名,-m指定说明文字。(6)git show v0.1:查看v0.1标签的说明文字。(7)git tag -s v0.2 -m "signed version 0.2 released" fec1452:通过-s使用私钥签名一个标签。

  操作标签:(1)git tag -d v0.1:删除标签 (2)git push origin v1.0:推送标签到远程。git push origin --tags:一次性推送到远程(3):git tag -d v0.9,git push origin :refs/tags/v0.9。删除已经推送到远程的标签。

  使用github:(1)点击"Fork"(2)git clone git@github.com:用户名/库名.git :在自己的账号下克隆一个仓库 其它操作


        参考资料:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000