初始化配置
#配置使用git仓库人员姓名git config --global user.name "your name come here"#配置使用git仓库的人员emailgit config --global user.email xxx@xxx.com#配置到缓存 默认15分钟git config --global cerdential.helper cache#修改缓存时间git config --global cerdential.helper ‘cache --timeout=3600’git config --global color.ui truegit config --global alias.co checkoutgit config --global alias.ci commitgit config --global alias.st statusgit config --global alias.br branchgit config --global core.editor "mate -w"#列举所有配置git config -1#用户的git配置文件~/.gitconfig
获取git仓库
#初始化一个仓库git init#clone远程仓库git clone git@xxx.git#添加远程仓库 origin 语法为 git remote add [shortname] [url]git reomte add origin git@xxx.git#查看远程仓库git remote -v
提交修改内容
#添加当前修改的文件到暂存区git add .#自动追踪文件,包括已经手动删除的,状态为deletedgit add -u#提交你的修改git commit -m ‘你的注释’#推送你的更新到远程服务器,语法为 git push [远程名] [本地分支]:[远程分支]git push origin master#查看文件状态git status#跟踪新文件git add readme.txt#仅在暂存区删除,保留文件在当前目录,不在跟踪git rm -cached.txt readme#重命名文件git mv readme.txt readme#查看提交的记录git log#修改最后一次提交注释的,利用-amend 参数git commit --amend#忘记提交某些修改,下面的三条名lion过只会得到一个提交git commit -m "add readme.txt"git add readme_forgottengit commit -amend#假设你已经使用git add . ,将修改过的文件阿a,b提交到暂存区#现在你只想提交a文件,不想提交b文件,应该这样git reset HEAD b#取消对文件的修改git checkout --readme.txt
查看,切换,创建,删除分支
#查看远程分支git branch -r#创建新的分支git branch <new_branch>#查看各分支最后提交的信息git branch -v#查看已经被合并到当前的分支git branch --merged#查看尚未被合并到当前的分支git branch --no-merged#切换到某个分支git checkout <branch>#创建新的分支,并且切换过去git checkout -b <new_branch>#基于branch创建新的分支git checkout -b <new_branch> <branch>#把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除git checkout $id#把某次历史提交记录checkout出来,创建成一个分支git checkout $id -b <new_branch>#删除某个分支git branch -d <branch>#强制删除某个分支(未被合并的分支需要强制删除)git branch -D <branch>
查看提交记录
#查看提交记录git log#查看该文件每次提交的记录git log <file>#查看每次详细修改内容的diffgit log -p <file>#查看最近两次详细修改内容的diffgit log -p -2#查看提交统计信息git log --stat
mac上可以使用tig代替diff和log,brew install tig
git基本的分支管理
#创建一个分支git branch dev#切换工作目录到devgit checkout dev#将上面的命令合到一起,创建的分支并切换到devgit checkout -b dev#合并dev分支,当前工作目录为mastergit merge dev#合并完成后,没有冲突,删除dev分支git branch -d dev拉去远程仓库的数据,语法为 git fetch [reomte-name]git fetch#fetch 会拉取最新的远程仓库数据,但不会自动到当前目录下,要自动合并git pull#查看远程仓库信息git remote show origin#建立本地的dev分支追踪远程仓库的develope分支git checkout -b dev origin/develope
git远程仓库管理
#查看远程服务器地址和仓库名称git romote -v#查看远程服务器仓库状态git remote show origin#添加远程仓库地址git romote add origin git@xxx.git#设置远程仓库地址(用于修改远程仓库地址)git romote set-url origin git@xxx.com#删除远程仓库地址git remote rm <repository>
创建远程仓库
#用带版本的项目创建纯版本仓库git clone --bare robbin-site robbin-site.git#将纯仓库上传到服务器上scp -r my_project.git git@git.csdn.net:~#在服务器上创建纯仓库mkdir robbon_site.git && cd robbon_site.git && git --bare init#设置远程仓库地址git romote add origin git@xxx.git#客户端首次提交git push -u origin master#首次将本地develope分支提交到远程develope分支,并且track、git push -u origin develope#设置远程仓库的HEAD指向master分支git remote set-head origin master#也可以设置跟踪远程仓库和本地仓库 ### ~~~git branch --set-upstream master origin/mastergit branch --set-upstream develope origin/develope
git安装注意事项
mac电脑下载homeview
安装程序下一步 -> 下一步 -> 下一步
*注意选项:
use git from branch only 只能git branch使用
use git from the windows command prompt 只能用windows的操作窗口 win + r -> cmd git
—version 可查看到git
use git and optional unix tools from the windows cpmmand prompt (把linux命令集成到windows中)能用git 和 window命令窗口
LINUX基础命令
#查看当前目录结构(-a包含隐藏文件)ls -l/-a:#清屏clear#进入当前路径cd xxx[路径地址]#进入同级cd ./#进入上级cd ../#创建文件夹mkdir [文件夹名字]#创建空文件touch [文件名字]#向文件中插入或者管理一些内容vi#进入插入模式i#保存并退出内容的插入模式ESC + :WQ#向指定的文件中插入内容(有该文件就写入,如没有该文件会自动创建并写入)[每次会覆盖执行]echo xxx > xxx.txt#查看文件中的内容cat#拷贝文件cp#删除文件rm -r 递归删除 -f 强制删除(一旦删除无法还原)例:删除依赖 rm node_mouldus -rf 删除所有 rm * 强制删除所有后缀为js的 rm *.js -rf
git的常规流程
git分为三个区域:工作区:代码开发暂存区:暂存代码历史区(暂存区):保存历史版本代码#创建git仓库git init#当前工作区修改的所有内容全部提交到暂存区git add ./-A#[可以指定提交的某个文件git add xxx.js]#暂存区提交到历史区,生成一个历史版本git commit -m ‘提交描述’ [可指定提交 git commit xxx.xx -m '指定提交某个文件']#[每次区域间进行提交后,都不会删除原有区域中的内容,这样保证下次提交,把区域对比出来不一样的内容提交,而不是所有的]#怎么查看当前修改的文件处于哪个区域?git status #红色:工作区 绿色:暂存区 看不见:已经提交到历史区,三区保持一致了#把暂存区的某个文件删除(场景:提交到暂存区的内容不好,我们可以删除)git rm --cached xxx.xx#把暂存区的文件全部删除git rm --cached . -r#如果在删除过程中发现从暂存区删除的文件在工作区被修改了,只有加上 -f 才能强制从暂存区把内容删除掉#场景:提交到暂存区一份,把工作区的修改了,但改的东西不好,想把暂存区内容撤回到工作区(覆盖新的内容)git checkout xxx.xx [暂存区内容没有消失,只是把工作区最新修改的信息覆盖了,让工作区和暂存区保持一致]#比较各区之间的区别#工作区vs暂存区git diff#工作区vs 历史区 master分支git diff master#暂存区vs历史区git diff --cached
git回滚
#暂存区回滚到工作区git checkout .##把上一个暂存区中的内容撤回到工作区#把最近的暂存区的内容删除掉git reset HEAD .#暂存区回滚到工作区git checkout .#历史区撤回到工作区git reset --hard 版本号[前7位即可]#查看历史操作信息history > xxx.txt#查看历史回退信息git reflog
git团队协作开发
一:基本开发流程(1)首先创建中央仓库,可基于gitHub/codding/gitLab/码云来创建(最好不要创建空仓库,因为空仓库中没有任何分支,只有提交一次历史信息才会生成master分支)把开发者都列入仓库的开发群组中,这样每个开发者用自己的账号,都有权限操作这个仓库了[当然也可以不这样做,所有开发者用统一的账号也可以,为了防止不知道是谁提交的,我们需要让每一个客户端在本读的git全剧配置中设置和当前使用代码管理网站相同的用户和邮箱git config --global user.name ‘xxx’ ...](2)创建客户端本地仓库(一个开发者就是一个仓库),还需要让本地仓库和远程仓库产生关联,这样才能实现后续的信息同步git init 创建本地仓库git remote add origin ‘远程仓库地址’ 连接远程仓库git remote -v 查看连接信息 (origin 是连接名称,一般都用这个名字,当然名字可以随便设置)git remote rm origin 移除本地仓库和远程仓库连接git remote update origin 更新远程仓库有更简单的方式:只要把远程仓库克隆到本地,就相当于创建本地仓库,而且自动建立了连接,并且把远程仓库中的内容也同步到了本地git clone ‘远程仓库地址’ ‘本地创建文件夹名称(不写默认是仓库名字)’(3)各自和中央服务器同步信息#把本地历史区的信息推送到中央服务器上(推送)git push origin master (每一次push之前最好都pull一下,如有冲突,在本地处理下,在提交)#把中央仓库的信息和本地仓库保持同步(拉取)git pull origin master团队协作开发 存在潜在问题 代码冲突
团队协作解决冲突
无分支管理模式
提交项目先拉取git pull origin mastergit add .git commit -m '描述'git push origin master同一行代码冲突:在提示的冲突命令行中同意即可ESC :wq (按enter键即可)然后提交不是同一行代码冲突:尝试合并失败,我们需要收到把代码进行合并,然后提交
单分支管理模式
每天第一件事先把master分支代码拉取到本地master分支,每个人在自己本地仓库中,先进行分支创建和切换git pull origin master分支是指历史区的分支,创建分支就是创建不同的线路来管理历史版本git branch 查看当前分支* master 星代表当前在哪个分支上git branch dev 创建一个叫dev的分支(创建完成后,会把本地的master的内容同步到dev分支上)git checkout dev 切换到dev分支git checkout -b dev 创建并切换到这个分支当工作区有新修改内容不想提交生成历史版本时:git stash 暂存文件git stash pop分支已经有生成历史版本的,也有没开发完的,这时不能直接切换分支,需要先暂存内容所以 使用场景为: 当工作区和暂存区还有没提交到历史版本的代码,要进行分支的切换,先进行 git stash进行暂存,在git checkout master切换分支,用git stash pop还原暂时存储的内容,最后合并分支 git merge dev [A分支merge B, 把B合并到A分支]
important
常用:git clone “远程仓库地址” 把远程仓库克隆到本地(本地自动和远程建立连接,自动把远程中的信息同步到本地了,本地也是一个单独的仓库:建议远程仓库不要是空的,至少要有一个master分支)git pull origin master 把远程仓库master信息同步到本地仓库master中git push origin master 把本地仓库master中的信息同步到远程仓库master中(需要使用gitLab的用户密码来进行权限校验:一般都是租场在远程仓库中把组员的账号都放到小组中,这样组员用自己的账号也有权限操作仓库了。最好在本地的git配置中把用户名和邮箱修改为和gitLab账号相同的信息)如有冲突:1.进入到编辑框模式, i -> ESC -> :wq 即可2.自己会把两份代码都保存到本地存储中,自己手动去选择要哪个,改完后重新提交git checkout -b xxx 创建分支并且切换到指定分支(可以本地master中的历史信息同步到新创建的分支中)git branch 查看分支git branch xxx 创建分支git checkout xxx 切换分支git branch -D xxx 删除分支git merge xxx 把xxx分支的信息合并到当前分支下git stash / git stash pop 暂存在切换分支时,有一部分信息并没有提交成为历史版本,为了防止信息的丢失,我们需要先使用stash保存,然后再j基于 stash pop 还原
