git命令探索之路

来源:互联网 发布:评论滚动效果php 编辑:程序博客网 时间:2024/05/16 12:04

      代码转移到git 上也有近一年,但一直都是在用Android Studio 来管理git,最近部门又在倡导规范使用git,看着后端的大哥们用命令行来控制git。感觉自己用着工具太low了,暗暗发誓辣么高大上的命令行一定要掌握,所以就开始了我的为期2天的命令行之路

     git 的起源和历史用的伙伴们应该都了解过,这里我也就不再啰嗦一遍,直接说一下在Android实际操作中用得到的东西,可能有些理解不是很恰当,但是也算是自己掌握的东西了。

   一、  前期的准备工作(以下的所有操作都是在已安装git版本控制的前提下)

   在自己的gogs  git服务端创建一个新的仓库,就会得到一个引导性的提示“快速帮助”


     这里面包含我们新建的仓库两种形式的地址 即http 和gogs协议,这个地址的选择要看后台搭建的时候支持那种,这里我就选择http的了。

 还包含了从命令行创建仓库可执行的命令

     我在我的E盘下创建一个名为gitText的文件夹,文件夹里仅有一个名为git001的txt文本如图


    之后我将把gitText文件夹通过命令行上传到git上管理,并且进行一系列的测试


二、开始测试

    右键文件夹gitText选择Git Bash Here 打开,进入到当前文件夹,效果如图



    1、根据图1的提示进行操作

    touch  命令是创建一个文件

    git init  是在本地创建一个git 仓库,成功后getText文件夹下会生成一个.git文件,默认隐藏,可以设置显示

    git commit -m 为本次提交添加描述 把代码提价到本地仓库

    git remote  add origin  添加仓库地址

    git  push -u origin master  将本地仓库推送到远程指定默认主机上(含 -u    master  分支名称)即将本地仓库代码推送到远程指定分支上

    初次提交这里有一个bug可能会遇到

    当不执行git commit -m "first commit" 时会报错

   

   如果不设置git 的账号的话也会提交失败,查看git 的【配置】使用git config --list可查看所有配置,设置git 的用户名和密码使用如下指令

   git config --global user.name yourName

   git config --global user.email yourEmail

  添加git commit 指令后如图:


     有人可能会好奇为什么文件夹gitText后会有一个master 这是当前分支,分支的相关操作一会儿会说

    提交成功后可以在后台看见提交的文件

   

    2、对git001文件进行编辑后如何提交

      git 文件有三种状态,即committed  已提交、modified 已修改、staged  已暂存

      git 有几个常用的命令

      git status 查看仓库的状态,会指出是否有新建的文件,修改的文件或者删除的文件等,即所有已追踪文件的状态

      当我在git001文件内添加几个数字111111111111111并保存后,执行git status 命令

      

     文件进入已修改状态,并且会提示你下一步操作,需要添加git  add 或者git commit -a

     git  add 文件名   添加指定文件到监控工作区的状态树

     git add .   他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除 的文件。

   git add -u 他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)

   git add -A 是上面两个功能的合集(git add --all的缩写)

   执行git add. 后查看git status  文件添加追踪成功,依次执行git commit  和git push -u origin master ,将本地修改提价到仓库

   

    这样就可以把修改的内容提价到线上了,在后台可以看见修改后的内容

    有时候提价了某些内容后悔了,想回退到某个提交之前的状态,这就需要版本回退 的相关操作了

  3、版本回退

    想回退版本,首先要知道都提交了那些版本,这是采用git log的指令查看提交日志 

    

     commit 的版本id

     Author 的提交者的信息 用户名 邮箱

     Date  提交时间

     first commit  提交时的信息描述

     我们可以根据commit id去回退到指定版本(版本回退是针对本地仓库的,远程仓库不会修改)

       git reset commitId 

     

       id可以只写一部分,此时查看代码发现本地代码回退到first commit 状态

//注意使用--hard参数会抛弃当前工作区的修改//使用--soft参数的话会回退到之前的版本,但是保留当前工作区的修改,可以重新提交

版本回退后如果立即使用git push origin 分支名 命令会提示本地版本落后于远程版本,需要把远程版本也拉低使用命令

git push origin 分支名称 --force 之后就可以正常使用了

       如果进行了版本回退以后又变卦了不想回退了想回到之前的状态,唉呀妈呀好变态啊,这时执行git log命令发现找不到second commit 的提交id了

 没关系git总是那么的人性化,执行git reflog 可以查看每一次提交的id so easy 回到想回去的点大笑 然后拿到commit id 执行git reset --hard 就好了


 4、分支

    master 是主分支,在开发的时候一般都会在自分支上进行开发,待功能完善后在与主分支合并

    git branch  查看分支,会列举出所有的分支,且当前分支前会有一个*号

    git branch BranchName 创建一个新的的分支BranchName 

    git checkout BranchName  切换到BranchName  分支上(工作空间在BranchName 分支上)

    git checkout -d newBranch  创建并切换到newBranch 分支上(git branch 分支名称+git checkout 分支名称)

     

  5、分支合并

      git merge 命令用于合并指定分支到当前分支

       根据上述操作当我在newDev分支上对文件git001进行操作,删除之前的内容,执行

       git status---->git add .----->git commit -m "third commit"------>git push -u origin newDev

       提交到远程

       此时我要把newDev分支与master分支合并执行

      git checkout master------> git merge newDev

       

     这样就把newDev分支上开发的内容合并到了master主分支上,当newDev分支没有用了的时候可删除分支

      执行git branch -d newDev 删除本地newDev分支

      

     执行git push origin --delete newDev 删除远程分支 

      合并必然会存在冲突,实际操作一下冲突怎么解决

  6、解决合并分支时的冲突

     冲突的产生:   当在不同的分支对同一个文件进行操作的时候,合并必然产生冲突

     当我在本地dev分支中对文件git001的第一行进行修改如添加字符串222222222222222提交到远程

     切换到主分支master (主分支下的git001文件第一行存在数据111111111111111)

      此时把自分支dev 合并到主分支master上即执行下列操作

      

      merge failed 提示在文件git001 中存在冲突,这时打开git001文件

      

    选择需要的内容

     在master分支上(执行merge冲突的这个分支)执行如下指令

      

     这时自分支dev上的内容就合并到了主分支maser上

      当合并的过程中不想合并了可以执行 git merge --abort   回到合并前的状态

      还有一个指令是git merge --continue   合并中止了继续合并的命令

7、标签操作

     git除了每次提交的commitid可以标记提交的点以外,还有一种标签tag,这个tag一般用来为每次发布的版本来做记录,每一个标签都代表一个已发布的版本

     git tag  查看已有标签命令

     git tag -a 标签名 -m "标签信息"   创建标签

     git push origin --tags 推送本地标签到远程

     git tag -d 标签名 删除本地标签

     git push origin :refs/tags/标签名  删除远程仓库标签


8、一些其它命令


     当我们和他人共同开发,远程仓库是别人已创建好的时候,需要从远程拉取代码到本地,需要clone 

     git clone  地址url

     git help    指令获取git完整的使用说明

     git remote       git remote -v       查看源

     git remote set-url origin 新的url        修改源

     git remote rm origin 结合 git remote add origin 新url    修改源

     

     git blame 文件名   查看指定文件是谁修改的

     git blame -L lineFrom,lineTo 文件名   产看指定文件从那行到那行是谁修改的

     git config --global core.finemode false  忽略文件权限

     git config --global core.ignorecase false  忽略字母大小写

     在windows中单独设置

     git config --global core.autocrlf false  换行符转换

     git config --global gui.encoding utf-8  避免ui乱码

     git config --global core.quotepath off 避免git status 中文文件名乱码


9、实践中拓展问题

      今天在自己clone远程仓库的时候发现没有同时下下来远程分支代码,这时候执行git branch 命令,只能看见主分支和自己新建的分支,然后想查看一下所有的分支

执行了git branch -a命令,看到了远程端的所有分支,分支显示名称均为红色,下载远程端分支只能在本地创建一个与远程端分支同名的分支 例如:远程端有一分支名为Yong

则执行命令为 git checkout -b Yong origin/Yong 即可,此时创建的新分支YongYu代码就与远程分支YongYu相同了


   在Android 开发过程中,项目里会有许多本地相关的配置文件,这些是需要忽略的,这些忽略的内容是设置在.gitignore文件中

   

再来记录一下.gitignore 文件的应用吧!!!

来源自己测试的经验。

     脑补一下git的忽略规则  http://www.cnblogs.com/kevingrace/p/5690241.html

     在使用Android Studio开发的过程中 有一些文件是可以不用每次都提交的本地配置之类的

     自动生成的 .iml文件

     .gradle  build 文件 

      本地的local.properties文件等

  下面是我使用的.gitignore文件

#*.iml#.gradle#/local.properties#/.idea/workspace.xml#/.idea/libraries#.DS_Store#/build#/captures#.externalNativeBuild#.idea# ---> Android# Built application files*.apk*.ap_# Files for the Dalvik VM*.dex# Java class files*.class# Generated filesbin/gen/*.iml# Gradle files.gradle/build/# Local configuration file (sdk path, etc)local.properties# Proguard folder generated by Eclipseproguard/# Log Files*.log# Android Studio Navigation editor temp files.navigation/# Android Studio captures foldercaptures/.idea.gradle
 在实际的使用过程中,如果修改了.gitignore文件,会发现没作用,这是需要执行

  git rm -r --cached .

  git add .

  git commit -m "update .gitignore"

  即清楚本地缓存即可

原创粉丝点击