GIT学习整理

GitHub操作流程 :



第一次提交 : 

方案一 : 本地创建项目根目录,然后与远程GitHub关联,之后的操作一样;

-- 初始化Git仓库 :gitinit ;

-- 提交改变到缓存 :git commit -m 'description' ;

-- 本地git仓库关联GitHub仓库 : gitremote add origin git@github.com:han1202012/TabHost_Test.git ;

-- 提交到GitHub : git push -u origin master ;

方案二 方案二就是不用关联GitHub仓库,直接从GitHub冲克隆源码到本地,项目根目录也不用创建;

-- GitHub上克隆项目到本地 :gitclone git@github.com:han1202012/NDKHelloworld.git ,注意克隆的时候直接在仓库根目录即可,不用再创建项目根目录 ;

-- 添加文件 :gitadd ./* ,将目录中所有文件添加;

-- 提交缓存 :gitcommit -m '提交';

-- 提交到远程GitHub仓库 : git push -u origin master ;

之后修改提交 : 

-- GitHub远程仓库同步 :git pull ;

-- 查看文件变更 : gitstatus ;

-- 提交代码到本地缓存 : git commit -m 'description';

--提交代码到远程GitHub仓库 :gitpush ;



.gitignore用法 :开放模式注明忽略的文件直接列出文件名,保守模式注明保留的文件 !文件名 ;



Git标签操作 :轻量级标签,带注释标签;

--查看标签 :gittag ;

--添加标签 :轻量级标签git tag tagName ,带注释标签git tag -a tagName -m'description' ;

--删除标签 :gittag -d tagName ;

--提交标签到GitHub : git push origin --tags ;



Git分支操作:创建分支后, 分支操作不会影响master分支,但是master分支改变会影其它分支;

--列出分支 :git branch ;

--切换分支 :git checkout master ;

--提交分支 : git push origin branchName ;

--删除分支 : git branch -d branchName ,强制删除分支 git branch -D branchName ;

--合并分支 : git merge branchName ;



.

. Git介绍

 

分布式 :Git版本控制系统是一个分布式的系统,是用来保存工程源代码历史状态的命令行工具;



保存点 :Git的保存点可以追踪源码中的文件,并能得到某一个时间点上的整个工程项目额状态;可以在该保存点将多人提交的源码合并,也可以会退到某一个保存点上;



Git离线操作性 :Git可以离线进行代码提交,因此它称得上是完全的分布式处理, Git所有的操作不需要在线进行这意味着Git的速度要比SVN等工具快得多因为SVN等工具需要在线时才能操作,如果网络环境不好, 提交代码会变得非常缓慢



Git基于快照 :SVN等老式版本控制工具是将提交点保存成补丁文件, Git提交是将提交点指向提交时的项目快照,提交的东西包含一些元数据(作者,日期, GPG);



Git的分支和合并 :分支模型是Git最显著的特点,因为这改变了开发者的开发模式, SVN等版本控制工具将每个分支都要放在不同的目录中, Git可以在同一个目录中切换不同的分支;

分支即时性 :创建和切换分支几乎是同时进行的,用户可以上传一部分分支,另外一部分分支可以隐藏在本地,不必将所有的分支都上传到GitHub中去;

分支灵活性 :用户可以随时创建合并删除分支,多人实现不同的功能, 可以创建多个分支进行开发, 之后进行分支合并, 这种方式使开发变得快速,简单, 安全;

 

. Git通用客户端(msysgit)



1. 下载Git客户端



Git客户端下载地址 :https://code.google.com/p/msysgit/downloads/list 将地址复制到浏览器栏即可下载.



2. 安装Git客户端



欢迎界面 :直接下一步;





协议 :必须接受;





安装位置 :预留100M空间,自定义安装位置;





选择安装组件 :也可以默认选择;

-- 图标组件(Additionicons) :选择是否创建快速启动栏图标或者是否创建桌面快捷方式;

-- 桌面浏览(WindowsExplorer integration) :浏览源码的方法, 单独的上下文浏览只使用bash或者只用Git GUI工具;高级的上下文浏览方法使用git-cheetahplugin插件;

-- 关联配置文件 :是否关联git配置文件,该配置文件主要显示文本编辑器的样式;

-- 关联shell脚本文件 :是否关联Bash命令行执行的脚本文件;

-- 使用TrueType编码 :在命令行中是否使用TruthType编码,该编码是微软和苹果公司制定的通用编码





开始菜单快捷方式目录 :设置开始菜单中快捷方式的目录名称,也可以选择不再开始菜单中创建快捷方式;





设置环境变量 :选择使用什么样的命令行工具,一般情况下我们默认使用Git Bash即可,默认选择;

-- Git自带 :使用Git自带的Git Bash命令行工具;

-- 系统自带CMD :使用Windows系统的命令行工具;

-- 二者都有 :上面二者同时配置,但是注意, 这样会将windows中的find.exe sort.exe工具覆盖,如果不懂这些尽量不要选择





选择换行格式 : 

-- 检查出windows格式转换为unix格式 :windows格式的换行转为unix格式的换行在进行提交;

-- 检查出原来格式转为unix格式 :不管什么格式的, 一律转为unix格式的换行在进行提交;

-- 不进行格式转换 :不进行转换, 检查出什么, 就提交什么;





开始安装





安装结束 :over;





3. 配置GitHub



修改GitBash的配置 : Git Bash设置为快速编辑模式,可以更好的使用该命令行工具





(1) 创建本地ssh



使用命令 :创建本地ssh

[plain] view plaincopy

1.  ssh-keygen -t rsa -C "13241153187@163.com"  

GitHub邮箱 :该命令后面的邮箱就是GitHub的注册邮箱

路径选择 :使用该命令之后,会出现提示选择ssh-key生成路径,这里直接点回车默认即可,生成的ssh-key在默认路径中;

密码确认 :这里我们不使用密码进行登录,用密码太麻烦;





(2) ssh配置到GitHub



进入生成的ssh目录 : C:\Documents and Settings\Administrator\.ssh,使用记事本打开 id_rsa.pub文件,将该文件中的内容复制;

id_rsa.pub 文件内容 : 

[plain] view plaincopy

1.  ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtT1YCeaNulpfC+ARqAWrCdfpi6CpW3gkGT0hp6Q8by7NnEfy4dah9CwSrNbWJH5eS4tiqckE+bdbSVNvAboFD1MtGZjtzE4GDweG/6J/SDYV/ADFN/RLWGb+5rQ8wMCjc/fODgLJDFxk1Fwk/TTqTcbtLab1toLcts3zGIW5DstA3RQ0CCX/sPew5m7vh7DcKXluj2TBd9hw== 13241153187@163.com  


进入GitHub网站 :登录GitHub, 选择Account Setting 用户设置




选择左侧的SSH-KEY选项 : 





点击右侧的AddSSH key :

 



将上面复制好的ssh-key复制进去 : 





验证是否配置成功 : 

使用命令 : 

[plain] view plaincopy

1.  ssh -T git@github.com  

成功提示 : 如果出现Hi han1202012! You've successfullyauthenticated, but GitHub does not provide shell access.就说明配置成功, 可以连接上GitHub;





(3) 配置本地用户和邮箱



用户名邮箱作用 :我们需要设置一个用户名邮箱,这是用来上传本地仓库到GitHub,GitHub中显示代码上传者;

使用命令 : 

[java] view plaincopy

1.  git config --global user.name "HanShuliang" //设置用户名  

2.  git config --global user.email "13241153187@163.com"  //设置邮箱  






4. Git Bash提交源码到GitHub



(1) GitHub中创建一个工程



工程的https地址: https://github.com/han1202012/TabHost_Test.git .

工程的SSH地址 : git@github.com:han1202012/TabHost_Test.git .



GitHub提示生成的命令 : 

-- Create a new repository on thecommand line : 

[plain] view plaincopy

1.  touch README.md  

2.  git init  

3.  git add README.md  

4.  git commit -m "first commit"  

5.  git remote add origin git@github.com:han1202012/TabHost_Test.git  

6.  git push -u origin master  


-- Push an existing repository from the command line : 

[plain] view plaincopy

1.  git remote add origin git@github.com:han1202012/TabHost_Test.git  

2.  git push -u origin master  




(2)初始化git目录



使用命令

[plain] view plaincopy

1.  git init  


如果不执行这条命令, 就会出现错误 :fatal: Not a git repository (or any of the parent directories): .git .



(3)添加文件



使用命令

[plain] view plaincopy

1.  git add ./*  



可能会报出一些警告,不用理会

[plain] view plaincopy

1.  warning: LF will be replaced by CRLF in AndroidManifest.xml.  

2.  The file will have its original line endings in your working directory.  

3.  warning: LF will be replaced by CRLF in bin/AndroidManifest.xml.  

4.  The file will have its original line endings in your working directory.  

5.  warning: LF will be replaced by CRLF in gen/shuliang/han/tabhost_test/BuildConfig.java.  


将仓库中的所有文件添加到缓存中;



(4)提交缓存



使用命令

[plain] view plaincopy

1.  git remote add origin git@github.com:han1202012/TabHost_Test.git  


将添加或者改变的内容提交到缓存中;



(5)Git本地缓存提交到GitHub



使用命令

[plain] view plaincopy

1.  git push -u origin master  



执行该命令,源码就被提交到了GitHub;



.

作者 :万境绝尘 

转载请注明出处http://blog.csdn.net/shulianghan/article/details/18812279

.



. Git的一些用法



1. .gitignore文件



屏蔽文件 :.gitignore文件是告诉Git哪些目录或者文件需要忽略,这些文件将不被提交

常用场景 :写完代码后会执行变异调试等操作,使用.gitignore文件将这些编译后的文件屏蔽,这些文件不需要Git工具进行管理;

Android中的.gitignore :Android bin gen 两个目录可以忽略;

.gitignore位置 :项目根目录下;



过滤模式 :Git中的 .gitignore中有两种模式,开放模式 保守模式,保守模式的优先级要高于开放模式;



开放模式 :设置哪些文件目录被过滤,凡是在文件中列出的文件或者目录都要被过滤掉;

-- 过滤目录 :/bin/就是将bin目录过滤,该文件下的所有目录和文件都不被提交;

-- 过滤某个类型文件 : *.zip *.class就是过滤zip class 后缀的文件,这些文件不被提交;

-- 过滤指定文件 :/gen/R.Java,过滤该文件, 该文件不被提交;



保守模式 :设置哪些文件不被过滤,凡是列在其中的文件都要完整的提交上去;

-- 跟踪目录 :!/src ,该目录下的所有文件都要被提交;

-- 跟踪某类文件 :!*.java ,凡是java文件都要保留;

-- 跟踪指定文件 :!/AndroidManifest.xml ,该文件需要保留, 提交上去;



配置原则 :一般情况下采用开放模式鱼保守模式共同使用;

eg : 一个目录下有很多目录和文件,当我们只需要保留其中的一个文件的时候,先用开放模式不保留这些文件,然后用保守模式将这个文件留下来,保守模式的优先级要高于开放模式;



2. 标签使用(Tag)



标签作用: 在开发的一些关键时期,使用标签来记录这些关键时刻,例如发布版本, 有重大修改, 升级的时候,会使用标签记录这些时刻,永久标记项目中的关键历史时刻;

 

查看标签: 列出的标签安装ASCII字母顺序确定,排序没有很明确的意义;

-- 列出所有的标签 :  

[plain] view plaincopy

1.  git tag  

-- 使用限定列出限定后的标签 : 

[plain] view plaincopy

1.  git tag -l v1.*  





标签分类 :Git中的标签分为轻量级标签(lightweight)带注释的标签(annotated),一般情况下推荐使用带注释的标签,如果标签是临时的可以采用轻量级标签;

-- 轻量级标签 :轻量级标签中的信息含量很少,这种标签只代表某时刻代码的提交,相当于指向这个提交的指针;

-- 带注释标签 :这种标签是一种校验和,包含标签名, 邮箱, 日期,标签信息, GPG签名验证,它相当于一个对象, 封装了这些信息;



创建标签 :

-- 创建轻量级标签 :这样的标签没有附带其它的信息;

[plain] view plaincopy

1.  git tag v2.0  



-- 创建带注释标签 : -m后跟的是注释信息, 当使用git show v2.1的时候,会显示这个注释信息;

[plain] view plaincopy

1.  git tag -a v2.1 -m 'first version'  


-- 
创建GPG私钥的注释标签 : 

[plain] view plaincopy

1.  git tag -s v2.1 -m 'GPG version'  

在本机上实验不成功出现下面的错误 : 

[plain] view plaincopy

1.  Administrator@XRDPTJ9ILK6IWRA /storage/TabHost_Test (master)  

2.  $ git tag -s v2.2 -m 'GPG version'  

3.  gpg: error loading `iconv.dll': 找不到指定的模块。  

4.    

5.  gpg: please see http://www.gnupg.org/download/iconv.html for more information  

6.  gpg: keyblock resource `c:/Documents and Settings/Administrator/.gnupg\secring.g  

7.  pg': file open error  

8.  gpg: keyblock resource `c:/Documents and Settings/Administrator/.gnupg\pubring.g  

9.  pg': file open error  

10.gpg: skipped "HanShuliang <13241153187@163.com>": secret key not available  

11. gpg: signing failed: secret key not available  

12.error: gpg failed to sign the data  

13. error: unable to sign the tag  

以后再找原因;

-- 为之前的提交添加标签 :先使用 git log--oneline命令列出之前的提交, 会有一个七位的十六进制数进行标记, 使用gittag -a v3.1 f1bb97a命令即可为这个提交添加标签;

[plain] view plaincopy

1.  $ git log --oneline  

2.    

3.  f1bb97a first commit  

4.    

5.  git tag -a v3.1 f1bb97a  




删除标签 :使用命令 git tag -d标签名命令删除标签;

[plain] view plaincopy

1.  git tag -d v0.1  





验证标签 :提交了GPG带注释标签才可以验证,因为上面没有提交成功,这里留下一个命令;

[plain] view plaincopy

1.  git tag -v v1.0  




共享标签 :即将标签提交到GitHub;

[plain] view plaincopy

1.  git push origin --tags  




 

3. 分支和合并



(1)查看现存分支



查看现存分支 :git branch命令;

[plain] view plaincopy

1.  git branch  


从结果可以看出, 现在只有一个分支master;



(2)创建分支



创建分支 :git branch分之名称, 就可以创建一个分支, 创建完分支以后可以查看分支, 当前使用的分支会显示成为绿色, 前面带有"*", 如果不是当前使用的分支,显示的是白色, 并且没有"*" 前缀;

[plain] view plaincopy

1.  git branch branch1  




(3)切换分支



切换分支 :git checkout分支名称, 切换分支以后, 分支进行操作,文件的改变不会体现在master主分支中,主分支改变, 会体现在其它分支中;

[plain] view plaincopy

1.  git checkout branch1  




关于主分支和其它分支 : 

-- 分支编辑 :现有两个分支 master主分支, 和刚创建的branch1 分支, 切换到 branch1分支, branch1 中创建一个文件description_branch1.txt; 

-- 其它分支文件不会影响主分支 :然后在切换回 master主分支, 发现没有description_branch1.txt文件,创建一个文件description_master.txt;

-- 主分支会影响其它分支 :在切换回 branch1分支中, 发现存在description_master.txt文件;

.

对比过程 : 



查看该工程项目分支情况 : 

[plain] view plaincopy

1.  git branch  

-- 分支结果 : 

[plain] view plaincopy

1.  branch1  

2.  master  



切换到 branch1分支 : 

[plain] view plaincopy

1.  git checkout branch1  

-- 切换结果 : 

[plain] view plaincopy

1.  Switched to branch 'branch1'  



查看 branch1分支下的文件 : 

[plain] view plaincopy

1.  ls  

-- 查看文件结果 : 

[plain] view plaincopy

1.  AndroidManifest.xml  ic_launcher-web.png   res  

2.  assets               libs                  src  

3.  bin                  proguard-project.txt  

4.  gen                  project.properties  


创建一个文件 : 

[plain] view plaincopy

1.  touch description_branch1.txt  


添加这个文件到本地缓存 :

[plain] view plaincopy

1.  git add description_branch1.txt  


提交本地缓存 : 注意, 这里必须提交如果不提交缓存,这个文件在主分支也会出现;

[plain] view plaincopy

1.  git commit -m 'add a description of branch1'  

-- 提交结果结果 : 

[plain] view plaincopy

1.  [branch1 7f5785e] add a description of branch1  

2.   1 file changed, 0 insertions(+), 0 deletions(-)  

3.   create mode 100644 description_branch1.txt  


查看该分支下的文件 : 

[plain] view plaincopy

1.  ls  

-- 查看文件结果 : 

[plain] view plaincopy

1.  AndroidManifest.xml      libs  

2.  assets                   proguard-project.txt  

3.  bin                      project.properties  

4.  <strong>description_branch1.txt</strong>  res  

5.  gen                      src  

6.  ic_launcher-web.png  


切换回主分支 : 

[plain] view plaincopy

1.  git checkout master  

-- 切换分支结果 : 

[plain] view plaincopy

1.  Switched to branch 'master'  

2.  Your branch is up-to-date with 'origin/master'.  



查看主分支文件 : 

[plain] view plaincopy

1.  ls  

-- 查看文件结果 :没有在 branch1中添加的文件;

[plain] view plaincopy

1.  AndroidManifest.xml  ic_launcher-web.png   res  

2.  assets               libs                  src  

3.  bin                  proguard-project.txt  

4.  gen                  project.properties  



.



(4)提交分支 



提交分支命令 :将本地的分支提交到 GitHub;

[plain] view plaincopy

1.  git push origin experiment  




(5)分支合并移除



合并分支命令 :合并分支之后,分支中有的文件在主分支中也会显示,相当于将branch1分支中的文件拷贝了一份到master分支中;

[plain] view plaincopy

1.  git merge branch1  

合并结果 : 

[plain] view plaincopy

1.  Updating f1bb97a..7f5785e  

2.  Fast-forward  

3.   description_branch1.txt | 0  

4.   1 file changed, 0 insertions(+), 0 deletions(-)  

5.   create mode 100644 description_branch1.txt  





.

(6)删除分支



删除分支命令 : 

[plain] view plaincopy

1.  git branch -d branch1  


强制删除分支命令 : 如果branch1 分支还没有被合并的话, Git是不允许删除这个分支的,此时要想删除该分支, 就只能使用下面的命令强制删除该分支

[plain] view plaincopy

1.  git branch -D branch1  




4. Git工作流程

 

(1)两种工作流程



协作开发工作流程 :这种情况是最复杂的情况,多人团队共同开发一个项目;

-- 与远程仓库同步 : git pull ;

-- 修改文件 :添加删除修改文件;

-- 查看变更 :git status ;

-- 载入变更 :添加文件,先使用gitadd fileName,在使用 git commit -m'note'载入变更; 如果是删除修改文件,直接使用 git commit -m 'note'提交;

-- 重复 :重复执行修改文件查看变更载入变更提交载入动作;

-- 上传 :使用 git push命令将项目源码提交带GitHub中去;



单独开发工作流程 :如果是个人独立开发, 仅追踪本地文件变更, 就不需要提交到服务器上, 因为Git是分布式的;

-- 修改文件 : 

-- 提交变更 : 

-- 重复 : 



(2)简单示例



1> 独立开发示例



该示例不会上传, 仅在本地进行操作;



GitHub中检出项目源码 :注意, 检出的源码是根目录源码,我们在总仓库的根目录检出即可,不同再为项目创建目录;

[plain] view plaincopy

1.  git clone git@github.com:han1202012/AndroidPictureViewer.git  

-- 检出克隆结果 : 

[plain] view plaincopy

1.  Cloning into 'AndroidPictureViewer'...  

2.  remote: Counting objects: 86, done.  

3.  remote: Compressing objects: 100% (62/62), done.  

4.  remote: Total 86 (delta 3), reused 86 (delta 3)  

5.  Receiving objects: 100% (86/86), 1.67 MiB | 109.00 KiB/s, done.  

6.  Resolving deltas: 100% (3/3), done.  

7.  Checking connectivity... done.  


删除bingen目录 :这两个目录是Android工程编译产生的临时文件,没有必要上传到GitHub中去;

[plain] view plaincopy

1.  rm -rf bin gen  

-- 查看删除结果状态 : 

[plain] view plaincopy

1.  git status  

-- 结果 : 

[plain] view plaincopy

1.  On branch master  

2.  Your branch is up-to-date with 'origin/master'.  

3.    

4.  Changes not staged for commit:  

5.    (use "git add/rm <file>..." to update what will be committed)  

6.    (use "git checkout -- <file>..." to discard changes in working directory)  

7.    

8.          deleted:    bin/AndroidManifest.xml  

9.          deleted:    bin/ImageView_Test.apk  

10.        deleted:    bin/classes.dex  

11.         deleted:    bin/res/crunch/drawable-xxhdpi/ic_launcher.png  

12.        deleted:    bin/resources.ap_  

13.         deleted:    gen/shuliang/han/imageview_test/BuildConfig.java  

14.        deleted:    gen/shuliang/han/imageview_test/R.java  



提交缓存 : 

[plain] view plaincopy

1.  git commit -a  

-- 提交结果 : 

[plain] view plaincopy

1.  [master e4377ba] delete bin and gen directory.  

2.   28 files changed, 2 insertions(+), 110 deletions(-)  

3.   create mode 100644 .gitignore  

4.   delete mode 100644 bin/AndroidManifest.xml  

5.   delete mode 100644 bin/ImageView_Test.apk  

6.   delete mode 100644 bin/classes.dex  

7.   delete mode 100644 bin/resources.ap_  

8.   delete mode 100644 gen/shuliang/han/imageview_test/BuildConfig.java  

9.   delete mode 100644 gen/shuliang/han/imageview_test/R.java  

 

2> 协作开发示例



与远程仓库同步 : 

[plain] view plaincopy

1.  git pull  

-- 如果其他人没有提交项目到GitHub,就会出现下面结果 : 

[plain] view plaincopy

1.  Already up-to-date.  


修改文件后查看变更 : 

[plain] view plaincopy

1.  git status  

-- 如果没有变更会出现下面情况 : 

[plain] view plaincopy

1.  On branch master  

2.  Your branch is ahead of 'origin/master' by 1 commit.  

3.    (use "git push" to publish your local commits)  

4.    

5.  nothing to commit, working directory clean  


载入变更 : 如果有变更,那么使用命令载入变更.使用 git commit -a或者 git add 命令;

-- 添加文件 :先使用 git add文件名来添加文件到缓存,之后使用 git commit -m ''命令提交代码到本地缓存;

-- 删除改变文件 :直接使用 git commit -m '',提交删除或则改变到本地缓存;



提交项目源码到服务器 : 

[plain] view plaincopy

1.  git push  

-- 提交源码结果 : 

[plain] view plaincopy

1.  warning: push.default is unset; its implicit value is changing in  

2.  Git 2.0 from 'matching' to 'simple'. To squelch this message  

3.  and maintain the current behavior after the default changes, use:  

4.    

5.    git config --global push.default matching  

6.    

7.  To squelch this message and adopt the new behavior now, use:  

8.    

9.    git config --global push.default simple  

10.  

11. See 'git help config' and search for 'push.default' for further information.  

12.(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode  

13. 'current' instead of 'simple' if you sometimes use older versions of Git)  

14.  

15. Counting objects: 4, done.  

16.Delta compression using up to 2 threads.  

17. Compressing objects: 100% (2/2), done.  

18.Writing objects: 100% (3/3), 292 bytes | 0 bytes/s, done.  

19. Total 3 (delta 1), reused 0 (delta 0)  

20.To git@github.com:han1202012/AndroidPictureViewer.git  

21.    1ddf8c7..e4377ba  master -> master  




查看GitHub中的源码情况 : gen bin 目录果然被删除了;

 

 

 

 

常见的git指令

Linux命令:

ls
        列举此目录下的所有可见文件
ls -ah
        列举当前目录下的所有文件,包括隐藏文件
cd
        进入某某文件夹,在cd后添加文件夹路径,例如 cdd:/进入D
mkdir
        创建某某文件夹,在mkdir后添加新建的文件夹名字,例如mkdir new新建一个名为new的文件夹
pwd
        用来显示当前所在的文件夹,在window下,仓库所在路径不要包含中文
cat
        cat后加文件名,可以显示在仓库里的那个文件包含的内容,例如 cat new.txt
rm
        rm 后加文件名,可以删除文件管理器中没用的文件

本地仓库:
git init
        把这个当前目录(你进入的目录为选中目录)变成Git可以管理的仓库
git add
        把新放入的文件,或者更改过的文件添加到仓库,git add后加文件名(包括后缀)

git add.

       把工作区的所有变化都提交到暂缓区(包括文件新增,文件修改,但不包括删除文件

git add-u

       提交已经add过的文件到暂缓区,(包括文件修改,文件删除,但不包括文件新增

git add-A

       上面两个指令的合集,(包括文件新增、修改、删除)

gitcommit
        提交到仓库,这个命令的全部是gitcommit -m "XXX" 其中的XXX是本次提交的说明,最好加上这里面的内容,方便以后找回原先的版本。唔,里面最好不要加中文,不然提交不了
git status
        查看当前仓库是否有未提交的修改

git rm
        
用于在版本库内删除一个文件。

gitmv 

       移动操作,具体使用:git mv XXX.txt aaa/    (第三个位置为文件名,第四个位置为要移动到的文件夹位置)
git diff
        查看当前修改,需要在文件未添加提交前才有效。
git diff HEAD -- file
        可以查看工作区与版本库最新版本的区别,file为文件名
git log
        查看版本历史记录,里面包含了版本号,可以用来回溯
git reset
        回溯其他版本,gitreset --hard 后加版本号(可以只使用前面7位)
git reset --hard HEAD^
        回溯上一个版本,一个^代表上个版本,^^代表上上个版本,版本太多,可使用HEAD~100,代表回溯前100个版本
git reflog
        显示所有的记录,用于已经返回旧版本,但又想再回到新版本

git checkout -- file
        可以丢弃工作区的修改(即工作区改变,但未add到暂缓区,可把工作区的内容变得和当前版本库内一样)。也可用于文件管理器中删除错误,需要从版本库内恢复文件,file为文件名
git reset HEAD file
        把暂缓区的修改回退到工作区,即取消add进暂缓区的修改,file为文件名

git checkout -b dev
        创建一个新的分支dev git check命令加上-b参数表示创建并切换,相当于这两条指令:
               1. git branch dev
               2. gitcheckout dev
git branch
        查看当前分支,会列出所有分支,当前分支有*
git checkout +分支名
        切换分支,例如 gitcheckout master 为切换回主分支
git merge +分支名
        合并某分支到当前分支,例如 gitmerge dev dev分支的工作结果合并到master分支上
        ---有可能会出现无法自动合并分支的情况,这时候需要首先手动解决冲突。解决冲突之后再提交
git branch -d +分支名
        删除某分支
git branch -D +分支名
        强行删除某分支,用于未合并的情况。

git log --graph --pretty=oneline --abbrev-commit
        用带参数的git log可以看到分支的合并情况

git merge --no--ff -m "merge with no-ff" dev
        --no-ff 是个参数,表示禁用Fastforward。使用Fast forward在合并后会丢失分支的数据,没有历史保留。加--no-ff是为了能在历史版本里留下历史,方便后续回找。后面的-m就是要创建一个新的commit

git stash
        把当前工作现场储存起来,等以后恢复现场之后再继续工作
git stash list
        可以查看原先的工作现场
               $ git stash list
               stash@{0}: WIP on dev: 6224937 add merge
git stash apply
        可以恢复现场,但是恢复之后,stash内容并不删除。使用: git stash apply stash@{0}
git stash pop
        恢复现场的同时,把stash内容也删除
git stash drop
        删除stash内容


远程仓库:
git push origin master
        本地提交后,此命令推送最新更新
git push -u origin master
        将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用gitpush了。
git push
        简单方式,默认只推送当前分支
git clone
        克隆远程仓库,需要知道仓库地址

gitremote
        
查看远程库的信息
git remote -v 
        
显示远程库更详细的信息

 

 

多人协作的工作模式:
        1.
首先,可以试图用gitpush origin branch-name推送自己的修改;
        2.
如果推送失败,则因为远程分支比你的本地更新,需要先用gitpull试图合并;
        3.
如果合并有冲突,则解决冲突,并在本地提交;
        4.
没有冲突或者解决掉冲突后,再用gitpush origin branch-name推送就能成功!
   
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-nameGitHub操作流程 :



第一次提交 : 

方案一 : 本地创建项目根目录,然后与远程GitHub关联,之后的操作一样;

-- 初始化Git仓库 :gitinit ;

-- 提交改变到缓存 :git commit -m 'description' ;

-- 本地git仓库关联GitHub仓库 : gitremote add origin git@github.com:han1202012/TabHost_Test.git ;

-- 提交到GitHub : git push -u origin master ;

方案二 方案二就是不用关联GitHub仓库,直接从GitHub冲克隆源码到本地,项目根目录也不用创建;

-- GitHub上克隆项目到本地 :gitclone git@github.com:han1202012/NDKHelloworld.git ,注意克隆的时候直接在仓库根目录即可,不用再创建项目根目录 ;

-- 添加文件 :gitadd ./* ,将目录中所有文件添加;

-- 提交缓存 :gitcommit -m '提交';

-- 提交到远程GitHub仓库 : git push -u origin master ;

之后修改提交 : 

-- GitHub远程仓库同步 :git pull ;

-- 查看文件变更 : gitstatus ;

-- 提交代码到本地缓存 : git commit -m 'description';

--提交代码到远程GitHub仓库 :gitpush ;



.gitignore用法 :开放模式注明忽略的文件直接列出文件名,保守模式注明保留的文件 !文件名 ;



Git标签操作 :轻量级标签,带注释标签;

--查看标签 :gittag ;

--添加标签 :轻量级标签git tag tagName ,带注释标签git tag -a tagName -m'description' ;

--删除标签 :gittag -d tagName ;

--提交标签到GitHub : git push origin --tags ;



Git分支操作:创建分支后, 分支操作不会影响master分支,但是master分支改变会影其它分支;

--列出分支 :git branch ;

--切换分支 :git checkout master ;

--提交分支 : git push origin branchName ;

--删除分支 : git branch -d branchName ,强制删除分支 git branch -D branchName ;

--合并分支 : git merge branchName ;



.

. Git介绍

 

分布式 :Git版本控制系统是一个分布式的系统,是用来保存工程源代码历史状态的命令行工具;



保存点 :Git的保存点可以追踪源码中的文件,并能得到某一个时间点上的整个工程项目额状态;可以在该保存点将多人提交的源码合并,也可以会退到某一个保存点上;



Git离线操作性 :Git可以离线进行代码提交,因此它称得上是完全的分布式处理, Git所有的操作不需要在线进行这意味着Git的速度要比SVN等工具快得多因为SVN等工具需要在线时才能操作,如果网络环境不好, 提交代码会变得非常缓慢



Git基于快照 :SVN等老式版本控制工具是将提交点保存成补丁文件, Git提交是将提交点指向提交时的项目快照,提交的东西包含一些元数据(作者,日期, GPG);



Git的分支和合并 :分支模型是Git最显著的特点,因为这改变了开发者的开发模式, SVN等版本控制工具将每个分支都要放在不同的目录中, Git可以在同一个目录中切换不同的分支;

分支即时性 :创建和切换分支几乎是同时进行的,用户可以上传一部分分支,另外一部分分支可以隐藏在本地,不必将所有的分支都上传到GitHub中去;

分支灵活性 :用户可以随时创建合并删除分支,多人实现不同的功能, 可以创建多个分支进行开发, 之后进行分支合并, 这种方式使开发变得快速,简单, 安全;

 

. Git通用客户端(msysgit)



1. 下载Git客户端



Git客户端下载地址 :https://code.google.com/p/msysgit/downloads/list 将地址复制到浏览器栏即可下载.



2. 安装Git客户端



欢迎界面 :直接下一步;





协议 :必须接受;





安装位置 :预留100M空间,自定义安装位置;





选择安装组件 :也可以默认选择;

-- 图标组件(Additionicons) :选择是否创建快速启动栏图标或者是否创建桌面快捷方式;

-- 桌面浏览(WindowsExplorer integration) :浏览源码的方法, 单独的上下文浏览只使用bash或者只用Git GUI工具;高级的上下文浏览方法使用git-cheetahplugin插件;

-- 关联配置文件 :是否关联git配置文件,该配置文件主要显示文本编辑器的样式;

-- 关联shell脚本文件 :是否关联Bash命令行执行的脚本文件;

-- 使用TrueType编码 :在命令行中是否使用TruthType编码,该编码是微软和苹果公司制定的通用编码





开始菜单快捷方式目录 :设置开始菜单中快捷方式的目录名称,也可以选择不再开始菜单中创建快捷方式;





设置环境变量 :选择使用什么样的命令行工具,一般情况下我们默认使用Git Bash即可,默认选择;

-- Git自带 :使用Git自带的Git Bash命令行工具;

-- 系统自带CMD :使用Windows系统的命令行工具;

-- 二者都有 :上面二者同时配置,但是注意, 这样会将windows中的find.exe sort.exe工具覆盖,如果不懂这些尽量不要选择





选择换行格式 : 

-- 检查出windows格式转换为unix格式 :windows格式的换行转为unix格式的换行在进行提交;

-- 检查出原来格式转为unix格式 :不管什么格式的, 一律转为unix格式的换行在进行提交;

-- 不进行格式转换 :不进行转换, 检查出什么, 就提交什么;





开始安装





安装结束 :over;





3. 配置GitHub



修改GitBash的配置 : Git Bash设置为快速编辑模式,可以更好的使用该命令行工具





(1) 创建本地ssh



使用命令 :创建本地ssh

[plain] view plaincopy

1.  ssh-keygen -t rsa -C "13241153187@163.com"  

GitHub邮箱 :该命令后面的邮箱就是GitHub的注册邮箱

路径选择 :使用该命令之后,会出现提示选择ssh-key生成路径,这里直接点回车默认即可,生成的ssh-key在默认路径中;

密码确认 :这里我们不使用密码进行登录,用密码太麻烦;





(2) ssh配置到GitHub



进入生成的ssh目录 : C:\Documents and Settings\Administrator\.ssh,使用记事本打开 id_rsa.pub文件,将该文件中的内容复制;

id_rsa.pub 文件内容 : 

[plain] view plaincopy

1.  ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtT1YCeaNulpfC+ARqAWrCdfpi6CpW3gkGT0hp6Q8by7NnEfy4dah9CwSrNbWJH5eS4tiqckE+bdbSVNvAboFD1MtGZjtzE4GDweG/6J/SDYV/ADFN/RLWGb+5rQ8wMCjc/fODgLJDFxk1Fwk/TTqTcbtLab1toLcts3zGIW5DstA3RQ0CCX/sPew5m7vh7DcKXluj2TBd9hw== 13241153187@163.com  


进入GitHub网站 :登录GitHub, 选择Account Setting 用户设置




选择左侧的SSH-KEY选项 : 





点击右侧的AddSSH key :

 



将上面复制好的ssh-key复制进去 : 





验证是否配置成功 : 

使用命令 : 

[plain] view plaincopy

1.  ssh -T git@github.com  

成功提示 : 如果出现Hi han1202012! You've successfullyauthenticated, but GitHub does not provide shell access.就说明配置成功, 可以连接上GitHub;





(3) 配置本地用户和邮箱



用户名邮箱作用 :我们需要设置一个用户名邮箱,这是用来上传本地仓库到GitHub,GitHub中显示代码上传者;

使用命令 : 

[java] view plaincopy

1.  git config --global user.name "HanShuliang" //设置用户名  

2.  git config --global user.email "13241153187@163.com"  //设置邮箱  






4. Git Bash提交源码到GitHub



(1) GitHub中创建一个工程



工程的https地址: https://github.com/han1202012/TabHost_Test.git .

工程的SSH地址 : git@github.com:han1202012/TabHost_Test.git .



GitHub提示生成的命令 : 

-- Create a new repository on thecommand line : 

[plain] view plaincopy

1.  touch README.md  

2.  git init  

3.  git add README.md  

4.  git commit -m "first commit"  

5.  git remote add origin git@github.com:han1202012/TabHost_Test.git  

6.  git push -u origin master  


-- Push an existing repository from the command line : 

[plain] view plaincopy

1.  git remote add origin git@github.com:han1202012/TabHost_Test.git  

2.  git push -u origin master  




(2)初始化git目录



使用命令

[plain] view plaincopy

1.  git init  


如果不执行这条命令, 就会出现错误 :fatal: Not a git repository (or any of the parent directories): .git .



(3)添加文件



使用命令

[plain] view plaincopy

1.  git add ./*  



可能会报出一些警告,不用理会

[plain] view plaincopy

1.  warning: LF will be replaced by CRLF in AndroidManifest.xml.  

2.  The file will have its original line endings in your working directory.  

3.  warning: LF will be replaced by CRLF in bin/AndroidManifest.xml.  

4.  The file will have its original line endings in your working directory.  

5.  warning: LF will be replaced by CRLF in gen/shuliang/han/tabhost_test/BuildConfig.java.  


将仓库中的所有文件添加到缓存中;



(4)提交缓存



使用命令

[plain] view plaincopy

1.  git remote add origin git@github.com:han1202012/TabHost_Test.git  


将添加或者改变的内容提交到缓存中;



(5)Git本地缓存提交到GitHub



使用命令

[plain] view plaincopy

1.  git push -u origin master  



执行该命令,源码就被提交到了GitHub;



.

作者 :万境绝尘 

转载请注明出处http://blog.csdn.net/shulianghan/article/details/18812279

.



. Git的一些用法



1. .gitignore文件



屏蔽文件 :.gitignore文件是告诉Git哪些目录或者文件需要忽略,这些文件将不被提交

常用场景 :写完代码后会执行变异调试等操作,使用.gitignore文件将这些编译后的文件屏蔽,这些文件不需要Git工具进行管理;

Android中的.gitignore :Android bin gen 两个目录可以忽略;

.gitignore位置 :项目根目录下;



过滤模式 :Git中的 .gitignore中有两种模式,开放模式 保守模式,保守模式的优先级要高于开放模式;



开放模式 :设置哪些文件目录被过滤,凡是在文件中列出的文件或者目录都要被过滤掉;

-- 过滤目录 :/bin/就是将bin目录过滤,该文件下的所有目录和文件都不被提交;

-- 过滤某个类型文件 : *.zip *.class就是过滤zip class 后缀的文件,这些文件不被提交;

-- 过滤指定文件 :/gen/R.Java,过滤该文件, 该文件不被提交;



保守模式 :设置哪些文件不被过滤,凡是列在其中的文件都要完整的提交上去;

-- 跟踪目录 :!/src ,该目录下的所有文件都要被提交;

-- 跟踪某类文件 :!*.java ,凡是java文件都要保留;

-- 跟踪指定文件 :!/AndroidManifest.xml ,该文件需要保留, 提交上去;



配置原则 :一般情况下采用开放模式鱼保守模式共同使用;

eg : 一个目录下有很多目录和文件,当我们只需要保留其中的一个文件的时候,先用开放模式不保留这些文件,然后用保守模式将这个文件留下来,保守模式的优先级要高于开放模式;



2. 标签使用(Tag)



标签作用: 在开发的一些关键时期,使用标签来记录这些关键时刻,例如发布版本, 有重大修改, 升级的时候,会使用标签记录这些时刻,永久标记项目中的关键历史时刻;

 

查看标签: 列出的标签安装ASCII字母顺序确定,排序没有很明确的意义;

-- 列出所有的标签 :  

[plain] view plaincopy

1.  git tag  

-- 使用限定列出限定后的标签 : 

[plain] view plaincopy

1.  git tag -l v1.*  





标签分类 :Git中的标签分为轻量级标签(lightweight)带注释的标签(annotated),一般情况下推荐使用带注释的标签,如果标签是临时的可以采用轻量级标签;

-- 轻量级标签 :轻量级标签中的信息含量很少,这种标签只代表某时刻代码的提交,相当于指向这个提交的指针;

-- 带注释标签 :这种标签是一种校验和,包含标签名, 邮箱, 日期,标签信息, GPG签名验证,它相当于一个对象, 封装了这些信息;



创建标签 :

-- 创建轻量级标签 :这样的标签没有附带其它的信息;

[plain] view plaincopy

1.  git tag v2.0  



-- 创建带注释标签 : -m后跟的是注释信息, 当使用git show v2.1的时候,会显示这个注释信息;

[plain] view plaincopy

1.  git tag -a v2.1 -m 'first version'  


-- 
创建GPG私钥的注释标签 : 

[plain] view plaincopy

1.  git tag -s v2.1 -m 'GPG version'  

在本机上实验不成功出现下面的错误 : 

[plain] view plaincopy

1.  Administrator@XRDPTJ9ILK6IWRA /storage/TabHost_Test (master)  

2.  $ git tag -s v2.2 -m 'GPG version'  

3.  gpg: error loading `iconv.dll': 找不到指定的模块。  

4.    

5.  gpg: please see http://www.gnupg.org/download/iconv.html for more information  

6.  gpg: keyblock resource `c:/Documents and Settings/Administrator/.gnupg\secring.g  

7.  pg': file open error  

8.  gpg: keyblock resource `c:/Documents and Settings/Administrator/.gnupg\pubring.g  

9.  pg': file open error  

10.gpg: skipped "HanShuliang <13241153187@163.com>": secret key not available  

11. gpg: signing failed: secret key not available  

12.error: gpg failed to sign the data  

13. error: unable to sign the tag  

以后再找原因;

-- 为之前的提交添加标签 :先使用 git log--oneline命令列出之前的提交, 会有一个七位的十六进制数进行标记, 使用gittag -a v3.1 f1bb97a命令即可为这个提交添加标签;

[plain] view plaincopy

1.  $ git log --oneline  

2.    

3.  f1bb97a first commit  

4.    

5.  git tag -a v3.1 f1bb97a  




删除标签 :使用命令 git tag -d标签名命令删除标签;

[plain] view plaincopy

1.  git tag -d v0.1  





验证标签 :提交了GPG带注释标签才可以验证,因为上面没有提交成功,这里留下一个命令;

[plain] view plaincopy

1.  git tag -v v1.0  




共享标签 :即将标签提交到GitHub;

[plain] view plaincopy

1.  git push origin --tags  




 

3. 分支和合并



(1)查看现存分支



查看现存分支 :git branch命令;

[plain] view plaincopy

1.  git branch  


从结果可以看出, 现在只有一个分支master;



(2)创建分支



创建分支 :git branch分之名称, 就可以创建一个分支, 创建完分支以后可以查看分支, 当前使用的分支会显示成为绿色, 前面带有"*", 如果不是当前使用的分支,显示的是白色, 并且没有"*" 前缀;

[plain] view plaincopy

1.  git branch branch1  




(3)切换分支



切换分支 :git checkout分支名称, 切换分支以后, 分支进行操作,文件的改变不会体现在master主分支中,主分支改变, 会体现在其它分支中;

[plain] view plaincopy

1.  git checkout branch1  




关于主分支和其它分支 : 

-- 分支编辑 :现有两个分支 master主分支, 和刚创建的branch1 分支, 切换到 branch1分支, branch1 中创建一个文件description_branch1.txt; 

-- 其它分支文件不会影响主分支 :然后在切换回 master主分支, 发现没有description_branch1.txt文件,创建一个文件description_master.txt;

-- 主分支会影响其它分支 :在切换回 branch1分支中, 发现存在description_master.txt文件;

.

对比过程 : 



查看该工程项目分支情况 : 

[plain] view plaincopy

1.  git branch  

-- 分支结果 : 

[plain] view plaincopy

1.  branch1  

2.  master  



切换到 branch1分支 : 

[plain] view plaincopy

1.  git checkout branch1  

-- 切换结果 : 

[plain] view plaincopy

1.  Switched to branch 'branch1'  



查看 branch1分支下的文件 : 

[plain] view plaincopy

1.  ls  

-- 查看文件结果 : 

[plain] view plaincopy

1.  AndroidManifest.xml  ic_launcher-web.png   res  

2.  assets               libs                  src  

3.  bin                  proguard-project.txt  

4.  gen                  project.properties  


创建一个文件 : 

[plain] view plaincopy

1.  touch description_branch1.txt  


添加这个文件到本地缓存 :

[plain] view plaincopy

1.  git add description_branch1.txt  


提交本地缓存 : 注意, 这里必须提交如果不提交缓存,这个文件在主分支也会出现;

[plain] view plaincopy

1.  git commit -m 'add a description of branch1'  

-- 提交结果结果 : 

[plain] view plaincopy

1.  [branch1 7f5785e] add a description of branch1  

2.   1 file changed, 0 insertions(+), 0 deletions(-)  

3.   create mode 100644 description_branch1.txt  


查看该分支下的文件 : 

[plain] view plaincopy

1.  ls  

-- 查看文件结果 : 

[plain] view plaincopy

1.  AndroidManifest.xml      libs  

2.  assets                   proguard-project.txt  

3.  bin                      project.properties  

4.  <strong>description_branch1.txt</strong>  res  

5.  gen                      src  

6.  ic_launcher-web.png  


切换回主分支 : 

[plain] view plaincopy

1.  git checkout master  

-- 切换分支结果 : 

[plain] view plaincopy

1.  Switched to branch 'master'  

2.  Your branch is up-to-date with 'origin/master'.  



查看主分支文件 : 

[plain] view plaincopy

1.  ls  

-- 查看文件结果 :没有在 branch1中添加的文件;

[plain] view plaincopy

1.  AndroidManifest.xml  ic_launcher-web.png   res  

2.  assets               libs                  src  

3.  bin                  proguard-project.txt  

4.  gen                  project.properties  



.



(4)提交分支 



提交分支命令 :将本地的分支提交到 GitHub;

[plain] view plaincopy

1.  git push origin experiment  




(5)分支合并移除



合并分支命令 :合并分支之后,分支中有的文件在主分支中也会显示,相当于将branch1分支中的文件拷贝了一份到master分支中;

[plain] view plaincopy

1.  git merge branch1  

合并结果 : 

[plain] view plaincopy

1.  Updating f1bb97a..7f5785e  

2.  Fast-forward  

3.   description_branch1.txt | 0  

4.   1 file changed, 0 insertions(+), 0 deletions(-)  

5.   create mode 100644 description_branch1.txt  





.

(6)删除分支



删除分支命令 : 

[plain] view plaincopy

1.  git branch -d branch1  


强制删除分支命令 : 如果branch1 分支还没有被合并的话, Git是不允许删除这个分支的,此时要想删除该分支, 就只能使用下面的命令强制删除该分支

[plain] view plaincopy

1.  git branch -D branch1  




4. Git工作流程

 

(1)两种工作流程



协作开发工作流程 :这种情况是最复杂的情况,多人团队共同开发一个项目;

-- 与远程仓库同步 : git pull ;

-- 修改文件 :添加删除修改文件;

-- 查看变更 :git status ;

-- 载入变更 :添加文件,先使用gitadd fileName,在使用 git commit -m'note'载入变更; 如果是删除修改文件,直接使用 git commit -m 'note'提交;

-- 重复 :重复执行修改文件查看变更载入变更提交载入动作;

-- 上传 :使用 git push命令将项目源码提交带GitHub中去;



单独开发工作流程 :如果是个人独立开发, 仅追踪本地文件变更, 就不需要提交到服务器上, 因为Git是分布式的;

-- 修改文件 : 

-- 提交变更 : 

-- 重复 : 



(2)简单示例



1> 独立开发示例



该示例不会上传, 仅在本地进行操作;



GitHub中检出项目源码 :注意, 检出的源码是根目录源码,我们在总仓库的根目录检出即可,不同再为项目创建目录;

[plain] view plaincopy

1.  git clone git@github.com:han1202012/AndroidPictureViewer.git  

-- 检出克隆结果 : 

[plain] view plaincopy

1.  Cloning into 'AndroidPictureViewer'...  

2.  remote: Counting objects: 86, done.  

3.  remote: Compressing objects: 100% (62/62), done.  

4.  remote: Total 86 (delta 3), reused 86 (delta 3)  

5.  Receiving objects: 100% (86/86), 1.67 MiB | 109.00 KiB/s, done.  

6.  Resolving deltas: 100% (3/3), done.  

7.  Checking connectivity... done.  


删除bingen目录 :这两个目录是Android工程编译产生的临时文件,没有必要上传到GitHub中去;

[plain] view plaincopy

1.  rm -rf bin gen  

-- 查看删除结果状态 : 

[plain] view plaincopy

1.  git status  

-- 结果 : 

[plain] view plaincopy

1.  On branch master  

2.  Your branch is up-to-date with 'origin/master'.  

3.    

4.  Changes not staged for commit:  

5.    (use "git add/rm <file>..." to update what will be committed)  

6.    (use "git checkout -- <file>..." to discard changes in working directory)  

7.    

8.          deleted:    bin/AndroidManifest.xml  

9.          deleted:    bin/ImageView_Test.apk  

10.        deleted:    bin/classes.dex  

11.         deleted:    bin/res/crunch/drawable-xxhdpi/ic_launcher.png  

12.        deleted:    bin/resources.ap_  

13.         deleted:    gen/shuliang/han/imageview_test/BuildConfig.java  

14.        deleted:    gen/shuliang/han/imageview_test/R.java  



提交缓存 : 

[plain] view plaincopy

1.  git commit -a  

-- 提交结果 : 

[plain] view plaincopy

1.  [master e4377ba] delete bin and gen directory.  

2.   28 files changed, 2 insertions(+), 110 deletions(-)  

3.   create mode 100644 .gitignore  

4.   delete mode 100644 bin/AndroidManifest.xml  

5.   delete mode 100644 bin/ImageView_Test.apk  

6.   delete mode 100644 bin/classes.dex  

7.   delete mode 100644 bin/resources.ap_  

8.   delete mode 100644 gen/shuliang/han/imageview_test/BuildConfig.java  

9.   delete mode 100644 gen/shuliang/han/imageview_test/R.java  

 

2> 协作开发示例



与远程仓库同步 : 

[plain] view plaincopy

1.  git pull  

-- 如果其他人没有提交项目到GitHub,就会出现下面结果 : 

[plain] view plaincopy

1.  Already up-to-date.  


修改文件后查看变更 : 

[plain] view plaincopy

1.  git status  

-- 如果没有变更会出现下面情况 : 

[plain] view plaincopy

1.  On branch master  

2.  Your branch is ahead of 'origin/master' by 1 commit.  

3.    (use "git push" to publish your local commits)  

4.    

5.  nothing to commit, working directory clean  


载入变更 : 如果有变更,那么使用命令载入变更.使用 git commit -a或者 git add 命令;

-- 添加文件 :先使用 git add文件名来添加文件到缓存,之后使用 git commit -m ''命令提交代码到本地缓存;

-- 删除改变文件 :直接使用 git commit -m '',提交删除或则改变到本地缓存;



提交项目源码到服务器 : 

[plain] view plaincopy

1.  git push  

-- 提交源码结果 : 

[plain] view plaincopy

1.  warning: push.default is unset; its implicit value is changing in  

2.  Git 2.0 from 'matching' to 'simple'. To squelch this message  

3.  and maintain the current behavior after the default changes, use:  

4.    

5.    git config --global push.default matching  

6.    

7.  To squelch this message and adopt the new behavior now, use:  

8.    

9.    git config --global push.default simple  

10.  

11. See 'git help config' and search for 'push.default' for further information.  

12.(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode  

13. 'current' instead of 'simple' if you sometimes use older versions of Git)  

14.  

15. Counting objects: 4, done.  

16.Delta compression using up to 2 threads.  

17. Compressing objects: 100% (2/2), done.  

18.Writing objects: 100% (3/3), 292 bytes | 0 bytes/s, done.  

19. Total 3 (delta 1), reused 0 (delta 0)  

20.To git@github.com:han1202012/AndroidPictureViewer.git  

21.    1ddf8c7..e4377ba  master -> master  




查看GitHub中的源码情况 : gen bin 目录果然被删除了;

 

 

 

 

常见的git指令

Linux命令:

ls
        列举此目录下的所有可见文件
ls -ah
        列举当前目录下的所有文件,包括隐藏文件
cd
        进入某某文件夹,在cd后添加文件夹路径,例如 cdd:/进入D
mkdir
        创建某某文件夹,在mkdir后添加新建的文件夹名字,例如mkdir new新建一个名为new的文件夹
pwd
        用来显示当前所在的文件夹,在window下,仓库所在路径不要包含中文
cat
        cat后加文件名,可以显示在仓库里的那个文件包含的内容,例如 cat new.txt
rm
        rm 后加文件名,可以删除文件管理器中没用的文件

本地仓库:
git init
        把这个当前目录(你进入的目录为选中目录)变成Git可以管理的仓库
git add
        把新放入的文件,或者更改过的文件添加到仓库,git add后加文件名(包括后缀)

git add.

       把工作区的所有变化都提交到暂缓区(包括文件新增,文件修改,但不包括删除文件

git add-u

       提交已经add过的文件到暂缓区,(包括文件修改,文件删除,但不包括文件新增

git add-A

       上面两个指令的合集,(包括文件新增、修改、删除)

gitcommit
        提交到仓库,这个命令的全部是gitcommit -m "XXX" 其中的XXX是本次提交的说明,最好加上这里面的内容,方便以后找回原先的版本。唔,里面最好不要加中文,不然提交不了
git status
        查看当前仓库是否有未提交的修改

git rm
        
用于在版本库内删除一个文件。

gitmv 

       移动操作,具体使用:git mv XXX.txt aaa/    (第三个位置为文件名,第四个位置为要移动到的文件夹位置)
git diff
        查看当前修改,需要在文件未添加提交前才有效。
git diff HEAD -- file
        可以查看工作区与版本库最新版本的区别,file为文件名
git log
        查看版本历史记录,里面包含了版本号,可以用来回溯
git reset
        回溯其他版本,gitreset --hard 后加版本号(可以只使用前面7位)
git reset --hard HEAD^
        回溯上一个版本,一个^代表上个版本,^^代表上上个版本,版本太多,可使用HEAD~100,代表回溯前100个版本
git reflog
        显示所有的记录,用于已经返回旧版本,但又想再回到新版本

git checkout -- file
        可以丢弃工作区的修改(即工作区改变,但未add到暂缓区,可把工作区的内容变得和当前版本库内一样)。也可用于文件管理器中删除错误,需要从版本库内恢复文件,file为文件名
git reset HEAD file
        把暂缓区的修改回退到工作区,即取消add进暂缓区的修改,file为文件名

git checkout -b dev
        创建一个新的分支dev git check命令加上-b参数表示创建并切换,相当于这两条指令:
               1. git branch dev
               2. gitcheckout dev
git branch
        查看当前分支,会列出所有分支,当前分支有*
git checkout +分支名
        切换分支,例如 gitcheckout master 为切换回主分支
git merge +分支名
        合并某分支到当前分支,例如 gitmerge dev dev分支的工作结果合并到master分支上
        ---有可能会出现无法自动合并分支的情况,这时候需要首先手动解决冲突。解决冲突之后再提交
git branch -d +分支名
        删除某分支
git branch -D +分支名
        强行删除某分支,用于未合并的情况。

git log --graph --pretty=oneline --abbrev-commit
        用带参数的git log可以看到分支的合并情况

git merge --no--ff -m "merge with no-ff" dev
        --no-ff 是个参数,表示禁用Fastforward。使用Fast forward在合并后会丢失分支的数据,没有历史保留。加--no-ff是为了能在历史版本里留下历史,方便后续回找。后面的-m就是要创建一个新的commit

git stash
        把当前工作现场储存起来,等以后恢复现场之后再继续工作
git stash list
        可以查看原先的工作现场
               $ git stash list
               stash@{0}: WIP on dev: 6224937 add merge
git stash apply
        可以恢复现场,但是恢复之后,stash内容并不删除。使用: git stash apply stash@{0}
git stash pop
        恢复现场的同时,把stash内容也删除
git stash drop
        删除stash内容


远程仓库:
git push origin master
        本地提交后,此命令推送最新更新
git push -u origin master
        将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用gitpush了。
git push
        简单方式,默认只推送当前分支
git clone
        克隆远程仓库,需要知道仓库地址

gitremote
        
查看远程库的信息
git remote -v 
        
显示远程库更详细的信息

 

 

多人协作的工作模式:
        1.
首先,可以试图用gitpush origin branch-name推送自己的修改;
        2.
如果推送失败,则因为远程分支比你的本地更新,需要先用gitpull试图合并;
        3.
如果合并有冲突,则解决冲突,并在本地提交;
        4.
没有冲突或者解决掉冲突后,再用gitpush origin branch-name推送就能成功!
   
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值