转载请注明出处:http://blog.csdn.net/Liuhe_5656/article/details/66969221
创建代码仓库
通过git init指令,可以将一个目录设置生Git代码仓库,代码如下:
mkdir test (创建文件夹)
cd test (切换至文件夹)
touch README (新建文件)
git init (初始化Git仓库)
输入git init命令:
代码仓库创建成功。
通过git status查看当前代码仓库状态:
git发现README文件还没有被提交到代码库中,并提示我们使用git add的方式添加版本控制。最后将add后的文件通过 git commit指令提交到代码仓库,完成一次版本的记录。
以上我们成功提交到了代码仓库,其中-m参数制定了提交时的注释。
可以通过git log指令,可以查看刚才的提交记录:
另外Git还提供了 git shortlog指令:
这条指令可以根据提交者的名字进行分组,显示每个开发者的所有提交commit记录,这适合在文档中创建日志。
追加修改
当开发者提交了一个commit,如果发现该commit有错,可以随时针对这个commit进行修改,例如在文件中笔者通过add,commit操作提交了“test1”,这是笔者想要修改这行文本为“test2”,这时候就不用重新生成一个提交,直接使用git commit –amend指令就可以:
通过git log查看提交记录:
通过git commit –amend将其改为test2:
可以通过这种方式修改commit,而不是通过新的commit老修改前一个错误的commit。
查看代码仓库状态
我们在之前的README文件中写入“Hello World”保存,并用git status查看当前代码仓库的状态:
可以发现,Git提示他检测到一个修改过的文件——“modified: README”,并提示我们使用git add/commit 进行版本管理。
我们还可以通过git diff这令查看发生变化文件的具体变化:
回退版本
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上个版本就是HEAD^^,如果上100个版本就可以写成HEAD~100
先看当前版本提交记录:
通过git reset –hard HEAD^会退到上一个版本:
此时版本已经回退了,也可以通过对应的commit id来会退到指定版本。
如果通过git reset进行版本回退后,再通过git log就无法找到reset 之前的那个版本的commid id了,可以通过git reflog找到记录,找到回退版本的commit id:
Git的文件操作
首先执行shell的rm命令将README删除,接下来执行git status查看当前代码仓库状态:
我们发现通过rm指令可以删除一个文件,Git不仅可以监听增加文件,修改文件,还可以监听删除文件。我们同样通过执行一次git add/commit操作来完成一次新的提交。
除了从shell的删除命令Git也提供了它的删除指令——git rm:
由此可见git rm删除文件后重新提交版本时省去了重新执行git add的操作。
分支
分支的概念很重要,尤其是团队协作的时候,假设两个人都在做同一个项目,这个时候分支就保证两个人能协同合作的最大利器了。举个例子,A,B两个人都在做同一个项目,但是不同的代码模块,这个时候A新建了一个分支叫做a,B新建了一个分支叫做b,这样A,B做的所有代码改动都在个自的分支,互不影响,等两个人把各自的模块都做完了,最后将分支合并起来。
执行git init初始化git仓库之后会默认生成一个主分支master,也就是你所在的默认分支。
通过git branch a新建一个名字是a的分支,知识后分支a和master内容是一模一样的,然后通过git branch查看当前所有分支情况:
可以看到master分支前面有个*号,用来当前所在分支,我们通过git checkout a切换到a分支上:
我们也可以直接创建分支并且自动切换到新建的分支上去:
git checkout –b a
合并分支
当A同学在a分支上终于完成了工作,这个时候需要他将代码合并到主分支master上,git merge就是合并分支指令。一般需要两步,第一步切换到主分支master分支,第二部执行git merge a,意思是把a分支代码合并过来,不出意外这个时候a分支的代码就顺利的合并到了master分支来了。但在合并的时候,经常会发生Merge的冲突问题。GIt在合并分支的时候,会对文件进行自动Merge。如果没有冲突,则自动合并代码。如果有冲突,Git会把冲突的代码都显示在代码中,让开发者删掉废弃的代码,完成合并操作:
Marge和Rebase
在合并分支的时候还有一种Rebase操作,它和Merge操作所实现的基本功能基本一样,唯一区别是Rebase操作后Git的时间线会被进行合并,二Merge不会。Merge报纸了完整的Git提交记录。
删除分支
当一个临时分支使用完毕后,最合适的操作就是把这个分支删除,避免过多的分支造成混乱:
有些时候可能会删除失败,比如a分支的代码还没有合并到master,你执行git branch –d a是删除不了的,它会提示你a分支代码还未合并,但是如果你非要删除,就可以执行git branch –D a强行删除a分支。