• git 基本操作小节操作(一) init clone status add 未完,参考链接在末尾


    1 $ git init

    对当前所在目录进行git 管理 在当前目录初始化新仓库

    2 $ git clone <url> <position>

    从url克隆一个仓库到postion处,如下

    $ git clone git://github.com/schacon/grit.git

    这会在当前目录下创建一个grit的目录,其中包含一个.git的目录,用于保存下载下来的所有的版本记录,然后从其中抽取出最新版本的文件进行拷贝。如果进入这个新见的grit目录,你会看到小木中所有的文件已经在里面了,准备好后续的开发使用。

    你也可以指定项目目录的名称,使用position参数如下

    $ git clone git://github.com/schacon/grit.git mygrit

    差别是,原来的grit变成了mygrit,其他的与上面一致。

    ps git中支持多中数据传输协议,上文使用git://协议,不过也支持http(s)://协议或者 user@server:/path.git所表示的ssh协议。

    3 git status 查看当前仓库文件状态

    baidudeMacBook-Pro-3:sijianing sijianing$ pwd
    /Users/sijianing/sijianing
    baidudeMacBook-Pro-3:sijianing sijianing$ touch newFile
    baidudeMacBook-Pro-3:sijianing sijianing$ git status
    位于分支 master
    您的分支与上游分支 'origin/master' 一致。
    
    要提交的变更:
      (使用 "git reset HEAD <文件>..." 以取消暂存)
    
    	新文件:   README
    	修改:     pom.xml
    	重命名:   src/main/java/com/baidu/personal-code/App.java -> src/main/java/com/baidu/personal/code/App.java
    	重命名:   src/test/java/com/baidu/personal-code/AppTest.java -> src/test/java/com/baidu/personal/code/AppTest.java
    
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
    	修改:     README
    
    未跟踪的文件:
      (使用 "git add <文件>..." 以包含要提交的内容)
    
    	newFile
    

    第一行(On branch master) 表示所属分支

    第二部分 要提交的变更(Changes to be committed)

    表示已经纳入git 版本控制 且修改已经被暂存但未提交(执行过git add 但未 git commit)

    第三部分 尚未暂存以备提交的变更(Changes not staged for commit)

    表示已经跟踪文件内容的变化(纳入版本控制)但是还没有放到暂存区(后文介绍的 git add可以将文件纳入暂存区)

    第四部分 未跟踪的文件(Untracked files)

    未跟踪的文件意味着Git在之前的快照提交中没有这些文件,git也不会将之自动纳入跟踪管理范围内,除非你明确的git add了这个文件,可以看到,这个newFile 文件是我们刚刚创建的。

    4 $ git add 

    使用此命令跟踪一个新文件。

    baidudeMacBook-Pro-3:sijianing sijianing$ git add newFile
    baidudeMacBook-Pro-3:sijianing sijianing$ git status
    位于分支 master
    您的分支与上游分支 'origin/master' 一致。
    
    要提交的变更:
      (使用 "git reset HEAD <文件>..." 以取消暂存)
    
    	新文件:   README
    	新文件:   newFile
    	修改:     pom.xml
    	重命名:   src/main/java/com/baidu/personal-code/App.java -> src/main/java/com/baidu/personal/code/App.java
    	重命名:   src/test/java/com/baidu/personal-code/AppTest.java -> src/test/java/com/baidu/personal/code/AppTest.java
    
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
    	修改:     README
    

     可以看到,对新文件newFile执行add操作后 newFile进入了暂存区,下面尝试对newFile进行修改

    baidudeMacBook-Pro-3:sijianing sijianing$ echo "123" >> newFile
    baidudeMacBook-Pro-3:sijianing sijianing$ git status
    位于分支 master
    您的分支与上游分支 'origin/master' 一致。
    
    要提交的变更:
      (使用 "git reset HEAD <文件>..." 以取消暂存)
    
    	新文件:   README
    	新文件:   newFile
    	修改:     pom.xml
    	重命名:   src/main/java/com/baidu/personal-code/App.java -> src/main/java/com/baidu/personal/code/App.java
    	重命名:   src/test/java/com/baidu/personal-code/AppTest.java -> src/test/java/com/baidu/personal/code/AppTest.java
    
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
    	修改:     README
    	修改:     newFile
    

     可以发现 暂存待提交区和未暂存区同时出现了两个newFile,实际上git保存了你上次add newFile时newFile的版本,而文件系统中保存的是修改过的newFile版本,如果你再次运行git add那么就会以修改过的版本为准。

    baidudeMacBook-Pro-3:sijianing sijianing$ git add newFile 
    baidudeMacBook-Pro-3:sijianing sijianing$ git status
    位于分支 master
    您的分支与上游分支 'origin/master' 一致。
    
    要提交的变更:
      (使用 "git reset HEAD <文件>..." 以取消暂存)
    
    	新文件:   README
    	新文件:   newFile
    	修改:     pom.xml
    	重命名:   src/main/java/com/baidu/personal-code/App.java -> src/main/java/com/baidu/personal/code/App.java
    	重命名:   src/test/java/com/baidu/personal-code/AppTest.java -> src/test/java/com/baidu/personal/code/AppTest.java
    
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
    	修改:     README
    

     5 .gitignore

    一般我们会有些文件无需纳入git管理,我们可以创建一个名为.gitignore的文件,列出列出忽略的文件模式(正则表达式)

    # 此为注释 – 将被 Git 忽略
    # 忽略所有 .a 结尾的文件
    *.a
    # 但 lib.a 除外
    !lib.a
    # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
    /TODO
    # 忽略 build/ 目录下的所有文件
    build/
    # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
    doc/*.txt
    # 忽略 doc/ 目录下所有扩展名为 txt 的文件
    doc/**/*.txt
    

    其中规范如下

    • 所有空行或者#开头的行都会被git忽略
    • 使用标准的glob模式匹配 
      • 指shell简化了的正则表达式,*匹配一个或者多个任意字符;[abc]表示匹配一个在方括号内的字符;?表示匹配任意一个字符;方括号内的"-"表示范围(比如[0-9])。
    • 匹配模式最后跟斜杠/表示说明要忽略的是目录
    • 要忽略指定模式以外的文件或目录,可以在前面加上!或^取反

    6 git diff

    查看已经暂存和未暂存的更新,不加参数直接输入git diff

    baidudeMacBook-Pro-3:sijianing sijianing$ git diff
    diff --git a/README b/README
    index 190a180..4ca9456 100644
    --- a/README
    +++ b/README
    @@ -1 +1,2 @@
     123
    +123
    #此命令比较的是文件系统中当前文件和上次add的快照之间的差异,也就是修改之后还没有暂存的变化。

     如果要查看已经暂存的文件和上次提交的差异 加参数 --staged

    7 git commit 提交更新

    默认的 git commit命令会启动文本编辑器来输入本次提交的说明。

    for exercise
    # 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
    # 说明将会终止提交。
    #
    # 位于分支 master
    # 您的分支领先 'origin/master' 共 1 个提交。
    #   (使用 "git push" 来发布您的本地提交)
    #
    # 要提交的变更:
    #       修改:     newFile
    #
    # 尚未暂存以备提交的变更:
    #       修改:     README
    #
    

     默认的提交信息包含git status的信息但放在注释行里,另外开头有一个空行,可以输入说明。这些注释行完全可以去掉,但是加上之后有助于回忆起这次更新的内容。

    另外,也可以使用-m参数提交说明

    baidudeMacBook-Pro-3:sijianing sijianing$ git commit -m "for exercise"
    [master 24fd388] for exercise
     5 files changed, 14 insertions(+), 2 deletions(-)
     create mode 100644 README
     create mode 100644 newFile
     rename src/main/java/com/baidu/{personal-code => personal/code}/App.java (87%)
     rename src/test/java/com/baidu/{personal-code => personal/code}/AppTest.java (95%)
    

     当前是在master分支提交,本次提交的完整SHA-1校验和是24fd388,以及本次提交中,多少文件修改过,多少行添加过,删除过。

     PS:commit 的是本地已经add过的,没有add的快照不会提交

    8 git commit -a 跳过使用暂存区域直接提交

    使用暂存区域管理可以管理提交的谢姐,但有时候略显繁琐,git commit -a选项 git会自动把所有跟踪过的文件add一遍 然后一起提交  

    9 git rm 移除文件

    要从git 中移除某个文件,需要从已跟踪文件清单中清除,且要从暂存区域移除。执行后对应文件就不再纳入git的版本管理,注意,此操作会一并删除本地文件,如果想保留本地文件用--cached即可。

    10 git mv 移动文件

    git mv A B 相当于执行一下三条命令

    $ mv A B
    $ git rm A
    $ git add B
    

    https://git-scm.com/book/zh/v1/Git-基础-查看提交历史 明天继续补

  • 相关阅读:
    内存溢出
    接手新业务
    pjb fabu
    中文手册
    人背的时候,做啥都失败
    帮助开发人员学习
    python中的__dict__,__getattr__,__setattr__
    NetCore在Docker中发布及运行
    ELK基础配置
    IdentityServer4 手动验签及日志记录
  • 原文地址:https://www.cnblogs.com/chafanbusi/p/10883024.html
Copyright © 2020-2023  润新知