git 整理文档
常用命令
用户信息设置:git config --global user.name "zhang san"git config --global user.email "zhangsan@test.com"
git clone 拉取代码git clone http://192.168.100.103/root/shop.git
git status //查看工作区状态git status
git add //提交所有文件的修改到暂存区git add file_namegit add .
git commit //本地版本提交git commit -m "版本提交说明"
git push //提交代码到远端服务器git push
git pull //拉取代码git pull
git checkout //分支切换git checkout master
git merge //分支合并git merge master -m "merge master into dev" //将master合并到当前分支
文件比对
查看工作目录文件修改前后差别(还未add到暂存区)git diff filename查看add进暂存区但未commit的文件与上一次commit的差别git diff filename比对当前分支与master分支上filename文件差别git diff master fileame对比工作目录与commit_id版本(commit_id提交之后)之间的文件差异git diff <commit_id> filename对比两个commit_id版本之间的差别git diff <commit_id> <commit_id>对比filename文件与上一个版本之间的差别git diff HEAD^ filename
标签管理
标签可以理解为commit_id的别名git tag //标签列表git show tag_name //查看指定标签详细信息,可以看到commit_id别名git tag tag_name //创建标签git tag -d tag_name //删除标签git push origin tag_name //将标签推送到远端服务器git push origin --tags //一次推送本地所有标签到远端服务器git push origin :refs/tags/tag_name //删除远端服务器标签git checkout tag_name //回退到指定标签版本
stash(保存当前工作进度,将工作区和暂存区恢复到修改之前)
有时候项目开发未完成,但需要优先处理一些其他事宜,比如需要先修复bug等,此时如果将代码commit显然不合适,此时stash可以帮忙。它将隐藏工作暂存区更改。让你的工作区看起来是干净的。注意:只有添加到版本管理的文件才能使用stash,比如你新增的文件,必须先git add file_name 到版本控制后stash才能识别它。git stash save "这是说明信息" //添加stashgit stash list //查看stash列表git stash pop //恢复存储的最后一个stash工作场景场,并删除stash条目git stash apply stash@{num} //恢复到指定的工作场景,num为git stash list看到的内容,此操作不会删除stash内容,需要手动删除git stash drop stash@{num} //删除指定的stash
git开发示例
获取代码/获取最新代码$ git clone http://192.168.100.249/root/shop.git //克隆代码,此处url为测试地址,工作中请更改为实际地址。如果你本地已经有代码,在开发新功能之前你应该获取最新状态$ git pull //拉取最新代码

创建dev分支来进行开发工作$ git checkout -b dev

dev分支开发在正常推进中,已完成某一部分功能开发,此时做了一次提交:$ git add . //将所有修改添加到暂存区,可能你只想提交部分已修改的文件,此时你可以使用$ git add File1 File2可以多文件,文件名之间空格分隔即可,当然也有可能永远都不想提交某个文件了,此时你可以看这里(忽略文件)$ git commit -m "已完成功能的A模块" //提交更新到本地仓库
突然接到电话,有个紧急问题等待你来解决,于是我们切换回master分支,创建一个新分支来处理紧急问题,前提你需要保持工作区是一个干净的状态,有一些方法可以绕过这个问题 (即,暂存(stashing) 和 修补提交(commit amending)),现在,我们假设你已经把你的修改全部提交了,这时你可以切换回 master 分支了:$ git checkout master
紧接着我们所要做的就是创建一个居于master的分支来解决紧急问题:$ git checkout -b debug

很快,问题就被修复,此时我们需要将修复后的代码合并到master来,将最新的master分支推送到远端:$ git checkout master$ git merge debug$ git push

处理完紧急事件,我们需要删除无用的分支,回到原来的分支继续工作,并完成另外一些功能:$ git checkout dev$ git branch -d debug
……. //开发ing$ git add .$ git commit -m "**功能开发完成"

你在 debug 分支上所做的工作并没有包含到 dev 分支中。 如果你需要拉取 debug 所做的修改,你可以使用 git merge master 命令将 master 分支合并入 dev 分支,或者你也可以等到 dev 分支完成,再将其合并回 master 分支。我们假设你已经开发完成,现在合并到master:$ git checkout master$ git merge dev
Auto-merging index.htmlCONFLICT (content): Merge conflict in index.htmlAutomatic merge failed; fix conflicts and then commit the result.
有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。当有合并冲突产生时, Git 做了合并,但是没有自动地创建一个新的合并提交。 Git 会暂停下来,等待你去解决合并产生的冲突。 你可以在合并冲突后的任意时刻使用 git status 命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件:$ git status
$ git statusOn branch masterYou have unmerged paths.(fix conflicts and run "git commit")Unmerged paths:(use "git add <file>..." to mark resolution)both modified: index.htmlno changes added to commit (use "git add" and/or "git commit -a")
任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。 出现冲突的文件会包含一些特殊区段,看起来像下面这个样子:
<<<<<<< HEAD<div id="footer">contact : email.support@github.com=======<div id="footer">contact : email.support@github.com>>>>>>> c85de86e9d93467711cc90a169911f370dd5ea1f</div>f
<<<<<<< HEAD 与 =======之间内容为本地分支内容,======= 与 >>>>>>> 之间为远程分支内容,c85de86e9d93467711cc90a169911f370dd5ea1f为此文件在远程分支最后提交的commit_id
假设我们将文件内容修改为:
<div id="footer">contact : email.support@github.com</div>
此时我们git status查看一下:
On branch masterYour branch and 'origin/master' have diverged,and have 1 and 1 different commits each, respectively.(use "git pull" to merge the remote branch into yours)You have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified: index.htmlno changes added to commit (use "git add" and/or "git commit -a")
git还不知道我们已经处理了冲突,现在我们需要通知git冲突已经被解决:$ git add index.html$ git status
On branch masterYour branch and 'origin/master' have diverged,and have 1 and 1 different commits each, respectively.(use "git pull" to merge the remote branch into yours)All conflicts fixed but you are still merging.(use "git commit" to conclude merge)
git告诉说我们已处理全部冲突,现在需要用git commit来结束合并,当然我们还得将合并后的信息推送到远端$ git commit -m "**功能开发完成"$ git push
现在我们需要删除dev分支,因为它已经用不到了$ git branch -d dev
至此,整个开发流程完成,现在分支结构是这样的:
请忽略c0-c5的顺序,它们只是commit_id
git文件忽略
忽略文件分两种情况:
一.文件未入库(未添加到版本控制)
在仓库目录下新建一个名为”.gitignore”的文件(以.开头为隐藏文件,如果你看不到文件,请更改设置来显示隐藏文件),”.gitignore”文件对其所在的目录及所在目录的全部子目录均有效。通过将.gitignore文件添加到仓库,其他开发者更新该文件到本地仓库,以共享同一套忽略规则,在项目初期,我们会添加.gitignore来排除一些需要永久排除的文件或者目录。下面是”.gitignore”文件配置语法:
#以'#'开始的行,被视为注释.#忽略掉所有文件名是 foo.txt的文件.foo.txt#忽略所有生成的 html文件*.html#foo.html是手工维护的,所以例外.!foo.html#忽略所有.o和 .a文件.*.[oa]#仅忽略当前目录下的config.php,其他目录下的config.php不会被忽略/config.php#忽略build文件夹下的所有文件,但不包括build文件夹本身build/#忽略 doc/haha.txt, 不包括 doc/server/haha.txtdoc/*.txt#忽略 doc/下所有的 .pdf 文件doc/**/*.pdf代表任意多层上级目录,此条目将忽略所有目录结构包含"/bin/Debug"的Debug目录下的所有内容**/bin/Debug/
二. 文件已入库(已在版本库中)
有时候我们要临时忽略已存在于本版库中的指定文件提交请求信息,我们可以使用:$ git update-index --assume-unchanged file_path
重新添加到版本管理中$ git update-index --no-assume-unchanged file_path
注意:这种方法只会忽略你本地仓库对特定文件的提交信息,并不会影响到其他开发人员对文件的操作(此文件在他们本地仓库,可修改,可提交,可push到远端)

浙公网安备 33010602011771号