Step 1:自报家门
git config --global user.name “wjh”
git config --global user.email “email@example.com”
注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
Step 2:创建版本库
mkdir learngit 在当前目录下 创建learngit文件夹
pwd 显示当前目录
git init 将当前目录变成git可以管理的仓库
1.git add readme.txt 将readme.txt添加到(暂存区)
2.git commit  -m “wrote a readme file” –m 后面表示对这次修改的解释   将暂存区的所有内容提交到当前分支
git status 观察仓库当前状态
git diff readme.txt 可以查看修改内容,若是commit之后,便看不到信息了。
Step 3:版本回退
git log 可以看到改动的日志
git log –pretty=oneline 日志简约版
注意此处看到的commit ID 将作为回退的更具
git reset –hard HEAD^回退到上一个版本 以此类推 HEAD^^回退到上上个版本 更甚至 HEAD~100前100个版本
git reset –hard 331231  回滚到指定ID版本
这些操作的本身 实质上改的是head指针的位置
git reflog 查看每一次的操作日志 也可便于查看commit id
Step 4:工作区和暂存区
默认建库创建的是master分支以及指向master的指针HEAD
需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
add操作是提交到暂存区  commit 是把暂存区内容提交到当前分支下。
3个工作区是GIT中非常重要的概念,需铭记之。
当你做如下操作: 修改文件(工作区中),然后add(到暂存区),然后再修改文件(工作区),然后commit(到分支)。 最后的结果 只是提交了第一次修改的内容,原因是我们需要add到暂存区的修改才能被提交到分支。
Tips:  linux 命令 cat readme.txt 可查看文件内容
Step 5:撤销修改
git checkout --readme.txt 这个操作就是让这个文件回到最近一次git commit
或git add
时的状态。
比如你改了一个文件,没add,那么撤销会撤销到上一次add时或者commit时的状态。
Step 6:删除文件
git rm xxx文件  将文件移除,但还未提交  git commit –m “xxx” 提交此次操作,这些操作都可以回退
Step 7:从远程库克隆&创建合并分支
git clone 地址 然后就copy一份到当前命令行所在目录 会自动建立一个文件夹
创建分支:git branch dev 创建一个分支dev
切换到指定分支:git checkout dev
高端合并版本命令: git checkout –b dev 创建并切换到指定分支
当在dev分支下开发完成后,我们可以合并到Master:
首先git checkout master 然后git merge dev 当完全合并后,  就可以删除该分支了:git branch –d dev
git branch 查看分支
Step 8:解决冲突
当你在feature1和master2个分支下对同一个内容进行修改的时候,就会发生冲突。
git merge feature1就会提示你冲突,git status可以查看下状态,然后你可以直接看文件的内容 查看冲突细节,当确认 并修改后之后,
add 掉 并且commit即可。
解决完之后 就可以 git branch –d feature1删除分支
Step 9:分支管理策略
git merge --no-ff -m "merge with no-ff" dev
--no-ff参数,表示禁用Fast forward
本次合并要创建一个新的commit
 
git log --graph --pretty=oneline --abbrev-commit
Step 10:Bug分支
当前工作区内容已被修改,但是并未完成。这时Boss来了,说前面的分支上面有一个Bug,需要立即修复。可是我又不想提交目前的修改,因为修改没有完成。但是,不提交的话,又没有办法checkout到前面的分支。此时用Git Stash就相当于备份工作区了。然后在Checkout过去修改,就能够达到保存当前工作区,并及时恢复的作用。
git stash 会有一个栈的管理,管理你的工作状态,你可以多次使用git stash
当你要恢复工作现场,git stash apply,但是该操作不会删除stash内容,你需要用git stash drop来删除
另外一种方式,使用git stash pop (有恢复和删除功效)
git stash list 可以查看栈中的情况
Step 11:Feature分支
经常开发新增一个新的功能,常需要增加一个分支来开发,完成后合并,并删除分支。
你接到任务开发新功能,当你建了分支开发完后,切回去准备合并时,老板说这个功能又不要了,这个时候,你可能需要删除分支:
git branch –d xxxx 这个方式 不行,会提示你还未合并 就想删?
你需要更暴力的:git branch –D xxxx
Step 12:多人协作
当你clone一个远程库的时候,git自动把本地的master与远程的库关联起来,并且远程仓库的默认名字是origin
要查看远程库的信息,用git remote,更详细的信息可以:git remote –v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
若没有推送权限,会隐藏第2条信息
Step 13:推送分支
推送指定分支到远程,也就是提交:
git push origin master
抓取分支
默认clone下来只能看到master分支
若你想远程origin的dev分支到本地,你可以 git checkout –b dev origin/dev
然后开发完了可以 git push origin dev
多人协作的工作模式通常是这样:
首先,可以试图用
git push origin branch-name
推送自己的修改;如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并;如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用
git push origin branch-name
推送就能成功!
如果git pull
提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
Step 14:标签
首先切换到需要打标签的分支上
然后git tag v1.0
git tag查看所有标签信息
默认标签最近一次commit。如果标签指定的
git tag v0.9 6224937
git tag -a v0.1 -m "version 0.1 released" 3628164 标签带说明
git show <tagname>可以看到说明文字
操作标签
git tag -d v0.1删除标签
标签推送到远程git push origin <tagname>
一次性全推送所有标签:
git push origin –tags
若标签已在远程,想删除标签:
git tag -d v0.9 先删本地
git push origin :refs/tags/v0.9 再删远程
忽略特殊文件
忽略文件的原则是:
忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的
.class
文件;忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
忽略某些文件时,需要编写
.gitignore
;.gitignore
文件本身要放到版本库里,并且可以对.gitignore
做版本管理!
Windows创建文件命令:echo.>.gitignore