安装
配置Git
设置名字和邮箱地址
git config --global user.name cytgenkidu
git config --global user.email tgenkidu@163.com
检查配置信息,执行 git config --list
更多自定义配置请查看。
创建新仓库(repository)
创建repository(仓库)
建立本地新仓库
创建新文件夹,打开,然后执行 git init
创建新的 git 仓库。
存储库克隆到新目录
- 创建一个本地仓库的克隆版本
git clone /path/to/repository
- 创建一个远程仓库的克隆版本
git clone username@host:/path/to/repository
Git工作流
Git有三种状态:已提交(committed)、已修改(modified)和已暂存(staged)。 由此引出三个工作区域的概念:Git 仓库、工作目录以及暂存区域(Index)。
- Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
- 工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
- 暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。
基本的 Git 工作流程如下:
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
添加和提交
提出更改(把它们添加到暂存区),命令如下:
- 添加某个文件:
git add <filename>
- 添加所有更改:
git add *
提交改动(改动已经提交到了本地的Git 仓库的 HEAD 中,但是还没到远端仓库),命令如下:git commit -m "代码提交信息"
推送改动
将改动提交到远程仓库:git push origin master
,可将master改为任何分支。
若未克隆现有仓库,并欲将你的仓库连接到某个远程服务器,可执行 git remote add origin <server>
,可将改动推送到所添加的服务器上去。
分支
分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。在你创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
创建分支
创建一个叫做“test”的分支:git branch test
,切换到“test”分支:git checkout test
。也可直接执行git checkout -b test
,创建并切换。
切换分支
切换回主分支:git checkout master
删掉分支
删除“test”分支:git branch -d test
,
除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的:git push origin <branch>
更新与合并
更新你的本地仓库至最新改动,执行:git pull
,在你的工作目录将获取(fetch)并合并(merge)远端的改动。
要合并其他分支到你的当前分支(例如 master),执行:git merge <branch>
。
在这两种情况下,git 都会尝试去自动合并改动。但很有可能并非每次都成功,还有可能出现冲突(conflicts)。 这时候需要修改文件来手动合并这些冲突(conflicts)。改后,你需要执行如下命令git add <filename>
将它们标记为合并成功。
在合并改动之前,你可以使用如下命令预览差异:git diff <source_branch> <target_branch>
示例
获取最新代码到本地,并自动合并到当前分支:
//查询当前远程的版本 $ git remote -v //直接拉取并合并最新代码 $ git pull origin master [拉取远端origin/master分支并合并到当前分支]
获取最新代码到本地,然后手动合并分支,需额外建立本地分支
//查看当前远程的版本 $ git remote -v //获取最新代码到本地临时分支(本地当前分支为[branch],获取的远端的分支为[origin/branch]) $ git fetch origin master:master1 [在本地建立master1分支,并下载远端的origin/master分支到master1分支中] //查看版本差异 $ git diff master1 [查看本地master1分支与当前分支的版本差异] //合并最新分支到本地分支 $ git merge master1 [合并本地分支master1到当前分支] //删除本地临时分支 $ git branch -D master1 [删除本地分支master1]
获取最新代码到本地,然后手动合并分支,不额外建立本地分支
//查询当前远程的版本 $ git remote -v //获取最新代码到本地(本地当前分支为[branch],获取的远端的分支为[origin/branch]) $ git fetch origin master [获取远端的origin/master分支] //查看版本差异 $ git log -p master..origin/master [查看本地master与远端origin/master的版本差异] //合并最新代码到本地分支 $ git merge origin/master [合并远端分支origin/master到当前分支]