zoukankan      html  css  js  c++  java
  • Git常用命令备忘

    基本操作

    • git init : 初始化

    • git add file : 添加

    • git commit -m "" : 提交

    • git status 查看哪些被修改,是否被提交

    • git diff filename : 查看修改了什么内容

    readme.txt

    Git is a version control system.
    Git is free software.
    

    修改后的readme.txt

    Git is a distributed version control system.
    Git is free software.
    
    • git status:

    1.刚刚编辑完成

    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
    	modified:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    2.执行完add操作后:

    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   readme.txt
    

    3.执行完commit

    $ git status
    On branch master
    nothing to commit, working tree clean
    
    • git diff:
    $ git diff readme.txt 
    diff --git a/readme.txt b/readme.txt
    index 46d49bf..9247db6 100644
    --- a/readme.txt
    +++ b/readme.txt
    @@ -1,2 +1,2 @@
    -Git is a version control system.
    +Git is a distributed version control system.
     Git is free software.
    

    版本回退

    • git log [--pretty=oneline] 看到最近的修改和commit[一行显示简化结果]
    $ git log
    commit 7cc923c7c82f59baef45bad87a7fe92372141f31 (HEAD -> master)
    Author: wangchao <twilight@0402.com>
    Date:   Tue Aug 6 11:05:59 2019 +0800
    
        add GPL
    
    commit f620929dc0099452ccbfd74f24627492488018e9
    Author: wangchao <twilight@0402.com>
    Date:   Tue Aug 6 10:51:26 2019 +0800
    
        add distributed
    
    commit b09dc7d79bea6543be0491bd3779f561b25ec435
    Author: wangchao <twilight@0402.com>
    Date:   Tue Aug 6 10:50:17 2019 +0800
    
        wrote a readme file
    
    

    git中,HEAD 表示当前版本,HEAD^表示前一个版本,HEAD^^表示上上一个版本,上100各版本表示为HEAD~100,HEAD 其实是一个指针,回退版本其实就是移动指针。回退到上一个版本的命令是:

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

    此时 git log 已经不会展示之前的被抛弃的版本,如果上面的命令行没有关闭的话可以获得append GPLcommit id,此时用git reset 也可以还原:

    • git reset --hard 7cc923c7c82f59baef45b 还原到指定commit id指定的版本,id 不需要全写

    但是如果,命令行已经关闭,找不到commit id,此时使用 git reflog 命令可以查看:

    • git reflog 记录每一次命令
    $ git reflog
    f620929 (HEAD -> master) HEAD@{0}: reset: moving to head^
    7cc923c HEAD@{1}: reset: moving to 7cc923c7c82f59baef45bad87a7fe92372141f31
    f620929 (HEAD -> master) HEAD@{2}: reset: moving to HEAD
    f620929 (HEAD -> master) HEAD@{3}: reset: moving to HEAD^
    7cc923c HEAD@{4}: commit: add GPL								# 找到这行,前面就是 commit id
    f620929 (HEAD -> master) HEAD@{5}: commit: add distributed
    b09dc7d HEAD@{6}: commit (initial): wrote a readme file
    
    # 使用上面获得的id,就可以恢复到指定的版本
    $ git reset --hard 7cc923c
    HEAD is now at 7cc923c add GPL
    

    删除文件

    1.真的要删除 --> git rm filename --> git commit -m 'del file'
    2.误删,需要恢复文件 --> git checkout -- filename (用版本库的版本替换工作区的版本)

    # 删除文件
    $ rm test.txt
    
    # 查看状态
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            deleted:    test.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    # 提交删除文件操作到暂存区
    git add test.txt  # 或者 git rm test.txt
    
    # 查看状态
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            deleted:    test.txt
    
    # 提交删除操作到版本库
    $ git commit -m 'del test.txt'
    [master 69c78ac] del test.txt
     1 file changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 test.txt
    
    

    撤销更改

    丢弃工作区的修改

    • git checkout -- readme.txt : 丢弃工作区的修改
    1. 还没有执行add,那么工作区将回到暂存区的状态
    2. 执行了add,还没有执行commit, 那么也将和暂存区一致
    • git reset HEAD <file> : 可以把暂存区的修改撤销掉(unstage),重新放回工作区
    总结如下: - 只修改了工作区,--> `git checkout -- ` - 提交到了暂存区,把暂存区和工作区同时撤销,--> `git reset HEAD ` --> `git checkout -- ` - 提交到了版本库,就只能回退版本,--> `git reset --hard HEAD^`

    远程仓库

    • ssh-keygen -t rsa -C "twilight0402@163.com" : 创建RSA密钥对
    • git remote add origin git@github.com:1601436878/AAA.git : 关联远程仓库
    • git remote rm origin : 解除与远程版本库的关联
    • git remote -v : 查看git对应的远程仓库地址
    • git push -u origin master : 第一次提交到远程
    • git push origin master : 之后提交不需要 -u
    • git clone git@github.com:1601436878/AAA.git : 克隆仓库,克隆后,保留了完整的git仓库,包括git log

    如果远程仓库有readme,回出错,第一次导入需要先pull

    • git pull --rebase origin master

    分支

    • git branch : 查看分支
    • git branch "name" : 创建分支
    • git checkout "name" : 切换分支
    • git checkout -b "name" : 创建+切换分支
    • git merge "name" : 合并某分支到当前分支
    • git branch -d "name" : 删除分支
    • 将远程分支拉取到本地(sourcetree中只需要双击远程分支即可):
      • git fetch origin 远程分支名:本地分支名 : 将远程分支拉取到本地
      • git checkout -b 本体分支 origin/远程分支: 拉取远程分支,并切换到新分支

    git branch dev创建dev分支,dev指向是指针,指向当前版本。master也是指针,指向master分支上的最新的位置,HEAD指向master或者dev

    git branch dev		# 从master分支的当前位置,创建dev分区
    git branch dev2		# 同理
    

    在不同的分支下修改文件,并分别提交

    git checkout dev
    vim README.md
    
    git checkout dev2
    vim README.md
    

    现在各个分支之间是这样的结构:
    git分支

    在不同的分支中,看不到其他分支的提交。但是git reflog可以看到所有分支的所有变化。没有被add或commit的变化在所有分支都是可见的。
    在master分支中执行 git merge dev 合并后,headmaster都指向了dev。这时可以删除dev了。
    git分支

    但是此时无法删除dev2.如果执行git branch -d dev2 会报错,此时可以用git branch -D dev2强行删掉dev2。如果想恢复到dev2的状态,就只能用 git reflog找到之前的 commit id了。

    冲突

    如果出现了一下这种情况,在合并分支时就会出现冲突

    git冲突

    $ git merge feature
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.
    

    冲突后readme.md文件变成了这样:

    $ cat README.md
    git is a distributed version control system.
    git is a free software under GPL.
    git has a mutable index called stage.
    
    <<<<<<< HEAD
    Creating a new branch is quick AND Simple.
    =======
    Creating a branch is quick & Simple.
    >>>>>>> dev
    

    此时需要手动修改readme.me文件,然后再 add 和 commit, 这样冲突才会解决

    $ cat README.md
    git is a distributed version control system.
    git is a free software under GPL.
    git has a mutable index called stage.
    
    Creating a new branch is quick and Simple.
    

    git log --graph 可以查看分支合并的情况

    $ git log --graph
    *   commit a40de601e061a393fae40df28796d9db4387bc27 (HEAD -> master)
    |  Merge: d6314aa 8dbf53c
    | | Author: wangchao <twilight@0402.com>
    | | Date:   Thu Aug 8 15:21:12 2019 +0800
    | |
    | |     fix confict
    | |
    | * commit 8dbf53c2d89e026544cc82be87ea21f593782ef8 (dev)
    | | Author: wangchao <twilight@0402.com>
    | | Date:   Thu Aug 8 15:07:13 2019 +0800
    | |
    | |     & Simple
    | |
    * | commit d6314aa206fcae0f103015933fe8027da2e763fb
    |/  Author: wangchao <twilight@0402.com>
    |   Date:   Thu Aug 8 15:04:19 2019 +0800
    |
    |       AND Simple
    |
    * commit 499304186d8522d0beb2ed328ead76631bf81a2f
    | Author: wangchao <twilight@0402.com>
    | Date:   Thu Aug 8 11:12:24 2019 +0800
    
    
    $ git log --graph --pretty=oneline --abbrev-commit
    *   a40de60 (HEAD -> master) fix confict
    |
    | * 8dbf53c (dev) & Simple
    * | d6314aa AND Simple
    |/
    * 4993041 edit in dev2
    * f8e17ea (origin/master) del readme.txt
    * 94571cf prepare
    * 2adf4b6 del test.txt
    * ee7d4b3 test.txt
    * 52cc68c understand how stage works
    * 16d5749 add GPL
    * ff98a79 add distributed
    * c435423 wrote a readme file
    * 1891025 Initial commit
    

    切换仓库

    // 先删除关联
    git remote rm origin
    // 再关联新的地址
    git remote add origin xxx
    

    .gitignore

    • 空行或是以#开头的行即注释行将被忽略;
    • 以斜杠 “/” 结尾表示目录;
    • 以星号 “*” 通配多个字符;
    • 以问号 “?” 通配单个字符
    • 以方括号 “[]” 包含单个字符的匹配列表;
    • 以叹号 “!” 表示不忽略(跟踪)匹配到的文件或目录;
    • 最前面加上/表示在当前目录下,不加则表示在所有目录下。比如data/,所有子目录下的data都会被忽略。

    git的.gitignore文件必须在项目push之前就创建。如果已经push过了再创建.gitignore就不会生效。
    但是!有解决办法!==> 清空本地缓存,再提交就可以生效 git rm -r --cached .。每次修改完.gitignore文件后也需要再次清理一次缓存。

    另,win下无法创建空文件名的文件,只能用gitBash的touch命令了

    小结

    • git status : 查看哪些被修改,是否被提交
    • git diff <filename> : 查看修改了什么内容,工作区和暂存区
    • git diff HEAD -- readme.txt : 查看工作区和版本库的区别
    • git log [--pretty=oneline] : 看到最近的commit记录 [一行显示简化结果]
    • git reflog : 记录每一次状态变化的命令,可以查看到每一次变化的 commit id

    从版本库恢复到工作区

    • git reset --hard HEAD^ : 回退到上一个版本
    • git reset --hard 7cc923c7c82f59baef45b : 还原到指定commit id指定的版本,id 不需要全写
    撤销工作区: - 只修改了工作区,--> `git checkout -- ` - 提交到了暂存区,把暂存区和工作区同时撤销,--> `git reset HEAD ` --> `git checkout -- ` - 提交到了版本库,就只能回退版本,--> `git reset --hard HEAD^`

    删除文件:
    1.真的要删除 --> git rm filename --> git commit -m 'del file'
    2.误删,需要恢复文件 --> git checkout -- filename (用版本库的版本替换工作区的版本)

  • 相关阅读:
    如何生成不规则形状的mask,以解决对图像不规则区域设置ROI的问题
    数字图像处理学习1
    opencv显示图像
    Calling Matlab Neural Network From Other EXE's
    这个百度文档很给力
    opencv不规则ROI——圆形ROI
    问题修改
    skinsmagic美化MFC界面
    第一次使用思维导图
    libsvm使用介绍中文版
  • 原文地址:https://www.cnblogs.com/twilight0402/p/13384348.html
Copyright © 2011-2022 走看看