1. git介绍,安装请移步 第一章
2. 基本命令(查找个别命令使用请查看末尾总结)
首先,选择一个合适的地方,创建一个空目录
git init
命令把这个目录变成Git可以管理的仓库,创建后是一个空的仓库

git add
到暂缓区,在提交git commit
至版本库(-m 表示提交的说明)
可先添加多个文件在一次性提交
再次修改info.log文件使用 git status
命令可以让我们时刻掌握仓库当前的状态
查看文件修改的内容(添加了dfff) 使用git diff命令
再次提交后使用 git status查看状态显示 没有需要提交的并且目录很干净
git log
命令显示从最近到最远的提交日志
用HEAD
表示当前版本,也就是最新的提交1094adb...
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个 版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100,
回退至上一个版本使用 git reset --hard HEAD^ 命令,回退到指定版本 git reset --hard 提交ID
提示: Git提供了一个命令
git reflog
用来记录你的每一次命令
git checkout -- file
可以丢弃工作区的修改
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令,
用命令git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区
在文件管理器中把没用的文件删了,或者用rm
命令删了 git rm file 在 git commit
连接远程仓库,从远程仓库获取代码请参考 远程同步与克隆
分支管理
git checkout -b dev 表示创建并切换到dev分支, git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
用git branch
命令查看当前分支,git branch
命令会列出所有分支,当前分支前面会标一个*
号
在当前 dev分支可添加和提交文件,我们可以使用 git checkout master命令 切换回master
分支
git merge
命令用于合并指定分支到当前分支(当前为master分支)
使用 git branch -d dev命令 删除dev分支 在使用git branch 命令查看分支
用git log --graph
命令可以看到分支合并图
合并dev
分支,请注意--no-ff
参数,表示禁用Fast forward
,Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了,类似下面这样
Git还提供了一个stash
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
存储命令 git stash
, 用git stash list
命令查看,
用git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
另一种方式是用git stash pop
,恢复的同时把stash内容也删了
Bug分支
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除
当你接到需修复一个代号101的bug的任务时,很自然地想创建一个分支issue-101
来修复它,但是当前正在dev
上进行的工作还没有提交这时候可以使用stash
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
步骤: 1.
存储当前工作现场 git stash, 2.切换到需修复bug的分支并创建且切换到bug修复分支 ,3.完成后切换到主分支合并
4.然后删除临时bug修复分支 5.恢复之前工作现场
Feature分支
软件开发中,总有无穷无尽的新的功能要不断添加进来。
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并到主分支,最后,删除该feature分支
步骤: 1.在需添加功能的分支上创建并切换到新功能分支 2. 开发并测试完到主分支进行合并,3.最后删除功能分支
多人协作开发
查看远程库的信息,用git remote
或者,用
git remote -v
显示更详细的信息:
推送分支,就是把该分支上的所有本地提交推送到远程库 git push origin master
并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master
分支是主分支,因此要时刻与远程同步;dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
抓取分支
当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master
分支。
git clone git@github.com:michaelliao/learngit.git
当推送失败时,可能因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,先用git pull
把最新的提交从origin/dev
抓下来,然后,在本地合并,解决冲突,再推送:
若git pull 失败请先指定本地master
分支与远程origin/
master
分支的链接
git branch --set-upstream-to=origin/master master
小结
查看远程库信息,使用
git remote -v
;本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用
git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交;在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致;建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
;从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突。
- 首先,可以试图用git push origin branch-name推送自己的修改.
- 如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
- 如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。
Git基本常用命令如下:
mkdir: XX (创建一个空目录 XX指目录名)
pwd: 显示当前目录的路径。
git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
git add XX 把xx文件添加到暂存区去。
git commit –m “XX” 提交文件 –m 后面的是注释。
git status 查看仓库状态
git diff XX 查看XX文件修改了那些内容
git log 查看历史记录
git reset --hard HEAD^ 或者 git reset --hard HEAD~ 回退到上一个版本
(如果想回退到100个版本,使用git reset –hard HEAD~100 建议使用 git reset --hard 版本id 来恢复了)
cat XX 查看XX文件内容
git reflog 查看历史记录的版本号id
git checkout -- XX 把XX文件在工作区的修改全部撤销。
git rm XX 删除XX文件
git remote add origin ssh://admin@ip:29418/sysbase/api.git 关联一个远程库
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
git clone ssh://admin@ip:29418/sysbase/api.git 从远程库中克隆
git checkout –b dev 创建dev分支 并切换到dev分支上
git branch 查看当前所有的分支
git checkout master 切换回master分支
git merge dev 在当前的分支上合并dev分支
git branch –d dev 删除dev分支
git branch name 创建分支
git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list 查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop 恢复文件的同时 也删除文件
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
git push origin master Git会把master分支推送到远程库对应的远程分支上
开发中命令大致的使用顺序
1. 从远程库中克隆项目 git clone ssh://admin@ip:29418/sysbase/api.git
2. 切换到开发者分支 git checkout dev
3. 新增或修改文件后添加到 暂缓区 git add XX (多文件时需全部提交可使用 git add . )
4. 提交到版本库或回滚修改文件 git commit –m“描述”/ git checkout -- XX文件
5. 与远程库更新同步 git pull (更新后有冲突请先本地合并冲突文件)
6. push到远程库 git push origin dev
7. 切换到 主分支(默认 master)分支 git checkout master
8. 合并开发(dev)分支 git merge dev