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

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

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

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

git命令探索之路

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

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

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

git命令探索之路

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


二、开始测试

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

git命令探索之路


    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 的【配置】使用git config --list可查看所有配置,设置git 的用户名和密码使用如下指令

   git config --global user.name yourName

   git config --global user.email yourEmail

  添加git commit 指令后如图:

git命令探索之路

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

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

   git命令探索之路

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

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

      git 有几个常用的命令

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

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

      git命令探索之路

     文件进入已修改状态,并且会提示你下一步操作,需要添加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 ,将本地修改提价到仓库

   git命令探索之路

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

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

  3、版本回退

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

    git命令探索之路

     commit 的版本id

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

     Date  提交时间

     first commit  提交时的信息描述

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

       git reset commitId 

     git命令探索之路

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

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

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

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

git命令探索之路

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

 没关系git总是那么的人性化,执行git reflog 可以查看每一次提交的id so easy 回到想回去的点git命令探索之路 然后拿到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 分支名称)

     git命令探索之路

  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

       git命令探索之路

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

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

      git命令探索之路

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

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

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

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

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

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

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

      git命令探索之路

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

      git命令探索之路

    选择需要的内容

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

      git命令探索之路

     这时自分支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命令探索之路

     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 files
bin/
gen/
*.iml
# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

.idea

.gradle
 在实际的使用过程中,如果修改了.gitignore文件,会发现没作用,这是需要执行

  git rm -r --cached .

  git add .

  git commit -m "update .gitignore"

  即清楚本地缓存即可

相关文章: