A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  Git的完整学习教程: http://www.liaoxuefeng.com/   
  参考: http://blog.csdn.net/kevindgk/article/details/51606925



1.创建版本库:
                创建空目录:mkdir {dirname}
                                   cd {dirname}
                把目录变成git可以管理的仓库: git init 或者 git --bare init
               
                把文件添加到仓库(文件必须在仓库目录或者子目录下):git add {filename}
                把文件提交到仓库:git commit -m "xxx"
                        -m 后面的内容为提交的说明;
                        可以先添加多个文件然后一次提交;
               
2.版本控制:
        版本回退:
                查看仓库当前状态:git status
                查看文件具体修改内容:git diff {filename}
                查看历史提交日志记录:git log
                查看精简历史提交日志记录:git log --pretty=oneline
                版本回退到上个版本:git reset --hard HEAD^
                版本回退到上上个版本:git reset --hard HEAD^^
                版本回退到上100个版本:git reset --hard HEAD~100
                版本回退到任意版本:git reset --hard commit_id
                可以通过查看每一次git命令的使用记录获取版本号:git reflog
        工作区和暂存区:---->
        管理修改:---->
        撤销修改:
                撤销文件在工作区的修改:git checkout -- {filename}
                        回到最近一次git commit 或者 git add 状态,
                        两种情况:
                                一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
                                一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
                对已经add到暂存区的文件,把暂存区的修改撤销掉,重新回到工作区:git reset HEAD {filename}
                        HEAD表示最新的版本
                对已经commit的文件,想要撤销本次提交,可以版本回退,前提是 没有推送到远程库;
        删除文件:       
                当在工作区把文件删除(工作区和版本库不一致):rm {filename}
                        的确需要删除版本库中文件:git rm {filename}
                                                                         git commit -m "remove filename"
                        误删,文件恢复即可(但是会失去commit后修改的内容):git checkout -- {filename}
                                git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”,

3.远程仓库:
        添加远程库:---->
        从远程库克隆:---->
       
4.分支管理:
        创建合并分支:
                创建dev分支,然后切换到dev分支:git checkout -b dev
                        相当于命令:git branch dev
                                           git checkout dev
                        分支名随意起,
                查看当前分支:git branch
                        当前分支前会有*号标志
                切换到master分支:git checkout master
                把dev分支合并到master分支:git merge dev
                        merge把目标分支合并到当前分支;
                合并完成后删除dev分支:git branch -d dev
                查看分支合并图:git log --graph
       
        解决冲突:---->
        分支管理策略:合并分支,如果可能,git采用fast forward模式,这种模式删除分支后会丢掉分支信息,
                                 可以强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
                合并分支禁用fast forward模式:git merge --no-ff -m "merge with no-ff" dev
        bug分支:修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
            当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
                存储当前工作现场:git stash
                查看stash列表:git stash list
                        stash可以多次,
                恢复工作现场:git stash apply
                删除stash内容:git stash drop
                恢复工作现场同时删除stash内容:git stash pop
                恢复到指定stash:git stash apply stash@{0}
        feature分支:添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,
                                所以,每添加一个新功能,最好新建一个feature分支,在上面开发,
                                完成后,合并,最后,删除该feature分支。
                                如果新功能取消,feature分支还没有合并,使用git branch -d feature 将会销毁失败,
                                使用强行删除命令:git branch -D feature
        多人协作:当从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来,远程仓库默认名称origin,
                查看远程库信息:git remote
                查看远程库详细信息:git remote -v
                推送分支:git push origin {branchname}
                        根据需要推送对应的分支;
                抓取分支:git pull
                        有冲突,要先解决冲突,
                本地创建和远程分支对应的分支:git checkout -b branch-name origin/branch-name
                        本地和远程分支的名称最好一致,
                建立本地分支和远程分支的关联:git branch --set-upstream branch-name origin/branch-name
                多人协作的工作模式:
                        首先,可以试图用git push origin branch-name推送自己的修改;
                        如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
                        如果合并有冲突,则解决冲突,并在本地提交;
                        没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
                        如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
               
5.标签管理:
        创建标签:---->
        操作标签:---->
       
       
6.git服务器的搭建
        Ubuntu(Linux)下git服务器的搭建:
        a.如果Linux没有装git,先安装git,需要sudo权限;
                安装git:sudo apt-get install git
                (安装的方式很多,百度一下一堆)
                git config --global user.name "Your Name"
                git config --global user.email "email@example.com"  //name和email的话现在设不设无所谓,需要的时候系统会提示你的...
        b.如果Linux没有安装SSH,
        安装SSH:sudo apt-get install ssh
        c.如果要给git用户加一些权限管理,安装gitosis,gitolite,自行百度吧;
                我没安装过,现在的开发场景也用不到;
        d.生成SSH公钥,
                ssh-keygen -t rsa -C "your_email@youremail.com"
                然后呢
                在命令行会出现这么一些文字提示:
                Enter file in which to save the key (.......)       //括号里面的就是密钥保存的位置
                ........already exists ,overwrite (y/n)?            //公钥已经存在,是否覆盖? 键入 y
                Enter passphrase (empty for no passphrase):         //加密码,直接回车代表不设置密码
                Entry same passphrase again:                        //确认密码
                然后呢,成功了...当然没有啦
        e.git客户端的配置,
                如果是Linux,重复a,b,d;
                如果是Windows,安装个msysgit,下载地址:https://git-for-windows.github.io/或者http://pan.baidu.com/s/1skFLrMt#path=%252Fpub%252Fgit
                        安装完成后,随便找个地方鼠标右键Git Bush here ,进入命令行窗口,
                        git config --global user.name "Your Name"
            git config --global user.email "email@example.com"
                        然后重复d,Windows系统在C:\Users\EtherealPatrick\.ssh\下可以找到密钥      //EtherealPatrick代表用户名,比如我的用户名就是EtherealPatrick
                        id_rsa是密钥,不用管;
                        id_rsa.pub是公钥, 可以用NotePad++等编辑器打开,里面就是一行公钥.....待会会有用
        f.Windows系统可以使用xshell进入Linux服务器,xshell的使用so easy,不会就baidu吧
                接下来是Linux的一些文件操作命令,不熟悉的可以百度了解先,
                ls           //directory listing
                ls -al       //formatted listing with hidden files
                cd dir       //change directory to directory
                cd -         //change to home
                pwd          //show current directory
                mkdir dir    //create directory dir
                vi xxx       //create file xxx ,if xxx is exist ,open file xxx
                :wq          //save and quit  
                Ctrl+c ,Ctrl+v    //不解释
                总结一下马上要做的事:
                        在服务器的.ssh目录下创建一个名为authorized_keys的文件,
                        将客户端.ssh目录下的id_rsa.pub的内容拷贝到authorized_keys
                所以:
                ls -al
                cd .ssh
                vi authorized_keys
                i           //键入i,下方会有--INSERT--提示,进入编辑模式
                然后,如果是Linux,按照上面方法进入id_rsa.pub,将公钥Ctrl+c,Ctrl+v 到authorized_keys
                        如果是Windows,用个编辑器打开id_rsa.pub,将公钥Ctrl+c,Ctrl+v 到authorized_keys
                Esc         //退出编辑模式
                :wq         //保存并退出文件
        g.git服务器创建版本库:
            mkdir TestGitService.git        //TestGitService.git 项目名
                cd TestGitService.git
                git --bare init
        h.git客户端clone git服务器仓库
                在需要clone仓库的目录下:git clone syh@123.123.123.123:/home/syh/TestGitService.git  即可
                说明:
                        syh是我的服务器用户名;
                        pwd  你可以看当前的目录,上面我已经提到过,
                        123.123.123.123是我的服务器的ip,
        i.        如果本地有项目从远程仓库将空的项目clone下来,你会得到一个空的项目文件夹,里面有一个隐藏的.git文件夹;
                将.git文件夹直接copy到你本地的安卓项目的根目录下;
                在你的安卓项目的根目录中直接右键,选择git bash,进入git的命令行        ;
                分别运行:git status
                                git add .
                                git commit -m "本次修改的标记"
                                git pull origin master
                                git push origin master
                没项目的话,在本地的TestGitService目录下创建项目就行了...
                               
                          
        大写的  未完待续...       
               
       
       
       
       
       
       
       
       
       
       

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马