git小结

作者: Sunny君907 | 来源:发表于2018-02-24 15:06 被阅读0次

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势, 通俗来讲,它其实是一个具备排序、对比以及合并项目更新等的工具。

1、获取和创建项目

         mdir  tag _name 创建一个空的文件夹

         git  init  初始化一个Git仓库(会在当前目录下生成一个.git 文件目录,Git用来跟踪和管理Git版本库的) 。

       git  clone +[url]   拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改, url是你要复制的项目地址

2. 基本快照

         使用 git add 添加需要追踪的新文件和待提交的更改, 然后使用 git status和 git diff 查看有何改动, 最后用 git commit 将你的快照记录进行提交。这就是使用的基本流程,绝大部分时候都是这样的。每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为" commit "。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

 git status  查看你的文件在工作目录与缓存的状态

   git  diff +路径  查看当前文件已修改了哪些内容

   git  add 把修改的文件添加到暂存区stage(或者叫index)

   git  commit -m  "备注"   从缓存区添加到当前分支

   git  commit --amend   用来追加修改,不会产生新的提交记录

   git checkout--文件名/路径  撤销本地修改

   git  log查看从近到远的提交记录

   git  reset  --hard HEAD^  表示回退到上一个版本

   git  reflog  查看你的每一次提交ID

   如果不小心提交了错误的信息,我们是可以使用Git命令回退到历史版本,当然Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,

也就是最新的提交记录(注意每一条提交记录都会有一个唯一标识的ID),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

如果想要回退到修改之前的版本,可以使用 git reflog 查看保存的提交记录的ID, 再使用git reset --hard commit_id返回到你修改之前的版本。

3、分支与合并

一般就是使用git branch 命令列出、创建与管理工作分支,使用git checkout命令切换到新的分支上下文.

git branch  local_branch     新建本地分支(不会改变分支指针)

git checkout  branch_name  切换到某个已存在的分支(本地的或远程的)

git checkout -b local_branch   新建并且换到本地分支

git branch -d  branch_name  删除分支

git branch –D branch_name  删除本地分支(只能删除本地创建的分支,因为 远程分支所有人都没有权限删除)

git reset --hard tag_name     放弃本地修改的内容.  这个方命令是把本地库当前分支的代码重置到tag节点的状态。(可能会丢失本地的修改,慎用)

二、Repo小结

android中使用git作为代码管理工具,开发了Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了Repo命令行工具,对git部分命令进行封装,将百多个 Git 库有效的进行组织。

1、清单文件库的介绍

    一个清单库可以包含多个清单文件和多个分支,每个清单文件和分支都有对应的版本。清单文件以xml格式组织的。举个例子:

         remote元素:定义了名为korg的远程版本库,其库的基址为git://172.16.1.31/

          default元素:设置各个项目默认远程版本库为korg,默认的的分支为gingerbread-exdroid-stable。当然各个项目(project元素)还可以定义自己的remote和revision覆盖默认的配置  。    

          project元素:用于定义一个项目,path属性表示在工作区克隆的位置,         

          name属性:表示该项目的远程版本库的相对路径      

          project元素的子元素copyfile: 定义了项目克隆后的一个附件动作,从src拷贝文件到dest 。

2repo常用指令

repo init -u []

        在当前目录下安装 Repo。这会产生一个 .repo/ 目录,目录包括装 Repo 源代码和标准 Android 清单文件的 Git 仓库。

                   .repo/目录还包括 manifest.xml,是一个在 .repo/manifests/ 目录选择清单的符号链接。

                   例如:repo init -u

ssh://192.168.10.10:29418/cory/manifest -m cory_study.xml(不同项目xml不同),自动生成隐藏文件.repo

参数:

-u:指定一个恢复清单仓库的地址(URL)。

-m:在仓库里选择一个清单文件。如果没有清单名称,那么默认是 default.xml。

-b:指定一个修正,例如,一个特殊的清单分支(manifest-branch) 。

repo sync []

 下载新的更改,更新在你本地环境中的工作文件。如果你不带参数运行 repo sync,它将同步所有项目的文件。

例如:拉取整个手机系统代码 repo sync -cj4 (-c代表只拉取某个分支,j4代表线程数目)

repo upload []   

在指定的项目中,Repo 把本地分支的更新比作远程分支在最后一次 Repo 同步。Repo 会提示你选择一个或更多尚未上传审查的分支。

repo diff []      

在 commit 和工作目录之间使用 git diff 显示明显差异的更改。

repo download  

从审查系统下载指定的更改,然后使它在你的项目的本地工作目录中可用。

repo branch      查看本地分支

repo prune []        删减(删除)已经合并的标题。

.repo/manifest.xml         查看项目是由哪些git库组成的

repo start []            一个新分支的发展,从清单中指定的修正开始的。

参数:

参数应该提供一个更改的简短说明给你正在尝试建立的       项目。如果你不知道,那就考虑使用默认名称。

指定将要参与这个主题分支的项目。

注意:"." 是当前工作目录下的项目的一个方便的简写。


6、git log --pretty=oneline               只查看提交名字

7、git reset --hardHEAD^                回退到上个版本,上上个版本后面两个^^,一次类推

8、git reset --hardHEAD~100         会退到前100个版本

9、cat readme.txt                              查看文件内容

10、git reflog                                       查看当前版本后的版本号

11、git reset --hard 版本号           回到版本号对应的版本

12、Ctrl+z                                             退出编辑

vim readme.txt i编辑 Esc 退出编辑:x保存退出

13、git checkout --readme.txt       撤销还未添加到暂存区的内容,添加到暂存区后无法用该命令撤销

14、rm b.txt                                         删除文件,后两种情况,commit提交为从版本库中彻底删除此文件;用checkout命令恢复文件,然后提交

15、git push -u originmaster          把本地仓库分支master内容推送到元仓库去

         gitpush origin master

16、git remote and

origin http://github.com/zhanguoliang/testgit.git         关联本地库

17、git clonehttp://github.com/zhanguoliang/testgit2.git                              从元仓库克隆一个本地库

18、git checkout -b name                          创建并切换分支name

19、git branch                                     查看有哪些分支

20、git checkout name                            切换到分支name(???)

21、git merge name                                   在master分支上合并name分支内容

[if !vml]

[endif]

产生冲突(conflicts)

22、git branch -d name                     删除name分支

23、git branch name                         创建分支name

24、git log --graph --pretty=oneline --abbrev-commit        查看进行过的操作

25、git merge --no-ff -m "合并禁用fast forward"              合并后删除分支后,还可以找到被删除的分支的信息

a、bug分支

1、当前分支上工作没有提交,有新的bug需要处理

gitstash                  将当前的工作现场隐藏起来

gitstash list              查看工作现场

gitstash apply             恢复工作现场

gitstash drop              删除一条stash,因为工作空间恢复后,stash的内容并不会删除

gitstash pop              恢复的同时把stash内容删除

b、多人协作

gitremote                  查看远程库的信息

gitremove -v               详细信息

gitpush origin master      推送本地代码到远程库

git push originname        推送到name分支

c、抓取分支

git pull 与 git pull --rebase

https://stackoverflow.com/questions/18930527/difference-between-git-pull-and-git-pull-rebase

http://www.cnblogs.com/iammatthew/archive/2011/12/06/2277383.html


git config

利用这个命令可以新增、更改Git的各种设置,例如:配置本地的用户名和邮箱

1) 配置使用git仓库的人员姓名

       git config --global user.name "YourName Comes Here"

2) 配置使用git仓库的人员email

       git config --global user.emailyou@yourdomain.example.com


15、git cherry-pick commit-id (多个分支的提交,不常使用,容易出错)

      公共问题的修改,例如先修改master公共分支,还需要添加到212kk_base分支上

1、先记一下master分支上本次修改的commit_id(注意不是change_id)

2、git checkout g212kk_base切换分支

3、git cherry-pick commit-id

4、git push origin HEAD:refs/for/g212kk_base

相关文章

网友评论

      本文标题:git小结

      本文链接:https://www.haomeiwen.com/subject/qsbqxftx.html