zoukankan      html  css  js  c++  java
  • 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,则是先从服务器上获取最新的更新信息,然后从服务器上下载最新的代码。

  • 相关阅读:
    Qt计算器开发(三):执行效果及项目总结
    [HNOI2019]校园旅行
    How to fix nuget Unrecognized license type MIT when pack
    How to fix nuget Unrecognized license type MIT when pack
    git 通过 SublimeMerge 处理冲突
    git 通过 SublimeMerge 处理冲突
    git 上传当前分支
    git 上传当前分支
    gif 格式
    gif 格式
  • 原文地址:https://www.cnblogs.com/evilKing/p/4419306.html
Copyright © 2011-2022 走看看