• git学习笔记


    实习期间学到的最重要的东西就是版本控制与文档规范,我们Android项目最开始是使用maven构建,后来又转回了gradle,版本控制是使用的git。

    第一部分  首先介绍一下常用的git命令

    1.Git的初始化

    (1).配置使用git仓库的人员姓名
    git config --global user.name "your name"
    (2).配置使用git仓库的人员email
    git config --global user.email you@yourdomain.example.com

    2.Git文档忽略机制
    Git提供了忽略机制,可以将工作目录中不希望接受Git管理的文档信息写到同一目录下的.gitignore文件中
    例如:工作目录下有个zh目录,如果不想把它加入到Git管理中,则执行:
    echo "zh" >.gitignore
    git add

    3.Git与Repo的比较
    Git操作一般对应一个仓库,而Repo操作一般对应一个项目

    4.Git help获取git基本命令

    5.Git init 或者使用git init-db
    创建一个空的Git库。在当前目录中产生一个.git的子目录。在当前目录中产生一个.git的子目录。
    以后,所有的文件变化信息都会保存到这个目录下,而不像CVS那样,会在每个目录和子目录下都创建一个CVS目录。
    在.git目录下有一个config文件,可以修改其中的配置信息。

    6.Git add
    将当前工作目录中更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入版本历史中,这也是提交之前所需要执行的一步。
    可以递归添加,即如果后面跟的是一个目录作为参数,则会递归添加整个目录中的所有子目录和文件。
    例如:git add dir1(添加dir1这个目录,目录下的所有文件都被加入)
    git add f1 f2 (添加f1,f2文件)
    git add . (添加当前目录下的所有文件和子目录)

    7.Git rm
    从当前的工作目录中的索引中删除文件。
    可以递归删除,即如果后面跟的是一个目录作为参数,则会递归删除整个目录中的所有子目录和文件。
    例如:git rm -r * (进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录)
    git rm f1 (删除文件f1,包含本地目录和index中的此文件记录)
    git rm -ached f1 (删除文件f1,不会删除本地目录文件,只删除index中的文件记录;将已经git add的文件remove到cache中,
    这样commit的时候不会提交这个文件,适用于一下子添加了很多文件,却又想排除其中个别文件的情况)

    8.Git commit:提交当前工作目录的修改内容
    直接调用git commit 命令,会提示填写注释。通过如下方式在命令行就填写提交注释:git commit -m "Initial commit of gittutor reposistory"。注意,和CVS不同,git的提交注释必须不能为空,否则就会提交失败。
    git commit 还有一个 -a 的参数,可以将那些没有通过git add标识的变化一并强行提交,但不建议。
    每一次提交,git就会为全局代码建立一个唯一的commit标识代码,用户可以通过git reset命令恢复到任意一次提交时的代码。
    git commit --amend -m "message" (在一个commit id 上不断修改提交的内容)

    9.Git status:查看版本库的状态。
    可以得知哪些文件发生了变化,哪些文件还没有添加到git库中等等。要格外注意提示为"Changed but not updated;"的文件。

    10.Git log:查看历史日志,包含每次的版本变化。每次版本变化对应一个commit id。
    Git log -1:-1的意思是只显示一个commit,想显示5个,就-5.不指定的话,git log会从该commit 一直往后显示。
    Git log --stat --summary (显示每次版本的详细变化)

    11.Git merge:把服务器上下载下来的代码和本地代码合并。或者进行分支合并。
    例如:当前在master分支上,若想将分支dev上的合并到master上,则git merge dev
    注意:git merge nov/eclair_eocket (是将服务器git库的eclair_eocket分支合并到本地分支上)
    git rebase nov/eclair_eocket (是将服务器git库的eclair_eocket分支映射到本地的一个临时分支上,然后将本地分支上的变化合并到这个临时分支,然后再用这个临时分支初始化本地分支)

    12.Git diff:把本地的代码和index中的代码进行比较,或者是把index中的代码和本地仓库中的代码进行比较。
    (1).Git diff:比较工作目录和index中的代码。
    (2).Git diff --cached:比较Index和本地仓库中的代码。

    13.Git checkout
    13.1 .切换到分支
    (1)创建一个新分支,并切换到该分支上:git checkout -b 新分支名
    (2)切换到某个已经建立的本地分支local_branck:git checkout local_branch
    (3)切换到服务器上的某个分支remote_branch:git checkout remote_branch (远程分支remote_branch可以通过git branch -r 列出)
    (4)切换到某个commit id:git checkout commit_id
    (5)切换到某个tag:git checkout tag
    13.2 .用已有分支初始化新分支
    (1)切换到某个已经建立的本地分支local_branch,并且使用此分支初始化一个新分支new_branch:
    git checkout -b new_branch_local_branch
    (2)切换到某个远程分支remote_branch,并且用此分支初始化一个新分支new_branch。
    git checkout -b new_branch_remote_branch
    (3)git checkout -b new_branch_commit_id
    (4)git checkout -b new_branch_tag

    14.还原代码
    例如"git checkout app/model/user.rb"
    就会将user.rb文件从上一个已提交的版本中更新回来,未提交的工作目录中的内容全部会被覆盖。

    15.Git -ls -files:查看当前的git库中有那些文件

    16.Git mv:重命名一个文件、目录或者链接
    例如:git mv helloworld.c helloworld1.c (把文件helloworld.c重命名为helloworld1.c)

    17.分支
    git branch 列出本地git库中的所有分支。在列出的分支中,若分支名前有*,则表示此分支为当前分支。
    git branch -r 列出服务器git库的所有分支。
    git branch -D branck_name:删除分支。删除后,发生在该分支的所有变化都无法恢复。强制删除此分支
    git diff master 分支名(比较主分支和另一个分支的区别)
    git -show -branch(查看当前分支的提交注释及信息)
    git -show -branch -all (查看所有分支的提交注释及信息)
    git whatchanged :查看当前分支的操作记录
    git merge "注释" 合并的目标分支 合并的来源分支
    git pull 合并的目标分支 合并的来源分支

    18.Git rebase:一般在将服务器最新内容合并到本地时使用

    19.Git reset:库的逆转与恢复,除了用来进行一些废弃的研发代码的重置外,还有一个重要的作用。比如我们从远程clone了一个代码库,
    在本地开发后,准备提交回远程。但是本地代码库在开发时,有功能性的commit,也有处于备份目地的commit等等。总之,commit的日志中有大量无用log,
    我们并不想把这些log在提交回远程是也提交到库中,因此就要用到git reset。
    它的命令形式:git reset [--mixed | --soft | --hard] [<commit -ish>]
    命令的选项:
    --mixed这个是默认的选项。如git reset [--mixed] dev^。它的作用仅是重置分支状态到dev1^,但是却不改变任何工作文件的内容。
    即,从dev1^到dev1的所有文件变化都保留了,但是dev1^到dev1之间的所有commit日志都被清楚了,而且,发生变化的文件内容也没有通过git add标识,
    如果您要重新commit,还需要对变化的文件做一次git add。这样,commit后,就得到了一份非常干净的提交记录。(回退了index和仓库中的内容)
    --soft相当于做了git reset --mixed,后,有对变化的文件做了git add。就可以直接commit了。(回退了仓库中的内容)
    --hard这个命令就会导致所有信息的回退,包括文件内容。一般只有在重置废弃代码时才用它。执行后,文件内容也无法恢复回来了。(回退了工作目录,index和仓库中的内容)

    20.Git revert:还原某次对版本的修改
    例如:git revert commit_id(其中commit_id为commit代码时生成的一个唯一表示的字符串)

    21.Git config:利用这个命令可以新增、更改Git 的各种设置。
    例如:git config branch .master .remote origin:就将master的远程版本库设置为别名叫做origin版本库。

    22.Git show:显示对象的不同类型。

    23.Git tag:创建、列出、删除或者验证一个标签对象(使用GPG签名的)。
    可以将某个具体的版本打上一个标签,这样就不需要记忆复杂的版本号哈希值字符串了,
    例如:git tag revert_version bbaf.....d6f29 :来标记这个被你还原的版本,那么以后你想查看该版本时,就可以使用revert_version标签名,而不是哈希值了。

    24.Git clone:取出服务器的仓库的代码到本地建立的目录中(与服务器交互)
    通过git clone 获取远端git库后,.git/config中的开发者信息不会被一起clone过来。任然需要为本地库的.git/config文件添加开发者信息。此外,开发者还需要自己添加.gitignore文件。
    通过git clone获取的远端git库,只包含了远端git库的当前工作分支。如果想获取其它分支信息,需要使用git branch -r来查看,如果需要将远程的其它分支代码也获取过来,可以使用
    git checkout -b 本地分支名 远程分支名 ,其中,远程分支名为git branch -r所列出的分支名,一般是诸如"origin/分支名"的样子。如果本地分支名已经存在,则不需要"-b"参数。

    25.Git pull:从服务器的仓库中获取代码,和本地代码合并。(与服务器交互,从服务器上下载最新代码,等同于:Git fetch + Git merge)
    从其它的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:git pull origin master :就是讲origin这个版本库的代码更新到本地的master主分支。
    git pull可以从任意一个git库获取某个分支的内容。用法为:git pull username@ipaddr:远端repository名远端分支名 本地分支名。这条命令将从远端git库的远端分支名获取到本地git库的一个本地分支中。其中,如果不写本地分支名,则默认pull到本地当前分支。
    需要注意的是,git pull也可以用来合并分支。和git merge的作用相同。因此,如果你的本地分支已经有内容,则git pull会合并这些文件,如果有冲突会报警。

    26.Git push:将本地commit的代码更新到远程版本库中,例如:git push origin:就会将本地的代码更新到名为orgin的远程版本库中。
    git push和git pull正好相反,是将本地某个分支的内容提交到远端某个分支上。
    用法:git push username@ipaddr:远端repository名 本地分支名 远端分支名。这条命令将本地git库的一个本地分支push到远端git库的远端分支名中。
    需要格外注意的是,git push不会自动合并文件。因此,如果git push时,发生了冲突,就会被后push的文件内容强行覆盖,而且没有什么提示。这在合作开发时是很危险的事情。

    27.Git fetch:从服务器的仓库中下载代码。(与服务器交互,从服务器上下载最新代码)
    相当于从远程获取最新代码到本地,不会自动merge,比Git pull更安全些。使用此方法来获取服务器上的更新。
    例如:如果使用git checkout nov/eclair_rocket(nov/eclair_rocket为服务器上的分支名),则是获取上次使用git fetch命令是从服务器上下载的代码;
    如果先使用git fetch,在使用git checkout nov/eclair_rocket,则是先从服务器上获取最新的更新信息,然后从服务器上下载最新的代码。

  • 相关阅读:
    webstock学习
    H5存储
    js保留两位小数
    html5拖动滑块
    js判断网页访问设备类型
    关于hadoop setCombinerClass 与 setReducerClass同时使用存在的问题。
    hadoop 输出中文乱码问题
    mapreduce实现学生平均成绩
    mapreduce 实现数子排序
    hadoop mapreduce实现数据去重
  • 原文地址:https://www.cnblogs.com/evilKing/p/4419306.html
Copyright © 2020-2023  润新知