美文网首页
git 常用命令

git 常用命令

作者: 醉了俗身醒了初心 | 来源:发表于2019-05-27 13:18 被阅读0次

    git常用命令

    克隆仓库代码:

    ```
    git clone 仓库地址 别名 
    git clone -b 分支名 仓库地址 别名
    //列如:
    git clone -b v2.8.1 https://git.oschina.net/oschina/android-app.git
     
    ```
    

    初始化本地仓库:

    ```
    git init
    ```
    

    跟踪新文件:

    ```
    git add 文件名(目录或者文件, 会递归添加)
    可以理解为: 添加到下一次提交中
    
    ```
    

    提交到本地仓库:

    ```
    git commit / git commit -m "description"
    ```
    

    移除文件:

    ```
    git rm 文件
    git rm -rf(递归强制) 文件目录
    
    ```
    

    尝试重新提交:

    ```
    git commit --amend 撤销上一次提交, 使用当前提交
    ```
    

    撤销对文件的修改:

    ```
    git checkout -- 文件名
    ```
    

    查看远程仓库:

    ```
    git remote -v 简写 / git remote show origin
    ```
    

    添加远程仓库:

    ```
    git remote add 分支名 url
    git remote add dev https://github.com/paulboone/ticgit
    ```
    

    拉取代码

    ```
    使用dev_osborn 代替url, 拉取某个分支代码, 
    你将会拥有那个远程仓库中的所有分支的引用, 不主动合并代码
    git fetch dev_osborn  
    
    从远程仓库拉取代码并且合并
    git pull dev_osborn 
    
    ```
    

    推送到远程仓库

    ```
    git push -u origin master 
    ```
    

    重命名远程仓库

    ```
    git remote rename dev_osborn(旧名字) test(新名字)
    ```
    

    查看提交历史

    ```
    git log 
    git log -p 显示每次提交的内容差异
    git log --stat 每次提交的简略的统计信息
    git log --since=2.weeks 列出所有最近两周内的提交
    
    -(n) 仅显示最近的 n 条提交
    
    --since, --after 仅显示指定时间之后的提交。
    
    --until, --before 仅显示指定时间之前的提交。
    
    --author 仅显示指定作者相关的提交。
    
    --committer 仅显示指定提交者相关的提交。
    
    --grep 仅显示含指定关键字的提交
    
    -S 仅显示添加或移除了某个关键字的提交
    
    ```
    

    移动文件或者重命名文件

    ```
    git mv file1 file2 重命名
    git mv file1 ~/Desktop 移动文件
    ```
    

    查看文件状态

    ```
    git status 查看文件状态
    git status -s 以更紧凑的方式输出
    A 添加
    M 修改
    AM 添加并修改
    MM 左右都表示已经修改了, 左边已放到暂存区, 右边未放到暂存区
    ```
    

    查看忽略文件

    ```
    cat .gitignore
    ```
    

    查看分支变化

    ```
    git diff 查看未暂存的文件更新了哪些部分
    git diff --cached 查看已经暂存的文件的变化
    ```
    

    查看配置信息

    ```
    git config --global --list 
    git config --help 查看帮助命令
    ```
    

    分支管理

    ```
    git branch testing 创建分支
    
    git checkout master 切换到指定分支
    
    git checkout -b dev 新创建并切换到dev分支
    
    git checkout -b dev origin/dev 拉取远程分支, 并创建本地分支
    
    git branch -d dev 删除dev分支
    
    git branch -D dev 强制删除分支
    
    合并分支 merge
    git checkout master
    git merge dev 将dev分支合并到master分支
    
    git branch 查看分支列表 
    
    git branch -v 查看各个分支最后一个提交对对象的信息
    
    git branch --merge 查看那个分支是当前分支的直接上游
    
    git branch --no--merge 查看尚未合并的分支
    
    git push origin :dev 删除远程dev分支
    
    衍合分支 rebase
    git checkout dev
    git rebase master 将dev分支衍合到master分支
    
    衍合分支, 快进合并
    假设在接下来的一次软件发布中,我们决定先把客户端的修改并到主线中,
    而暂缓并入服务端软件的修改(因为还需要进一步测试)。
    这个时候,我们就可以把基于 server 分支而非 master 分支的改变(即 C8 和 C9),
    跳过 server 直接放到 master 分支中重演一遍, 
    但这需要用 git rebase 的 --onto 选项指定新的基底分支 master:
    git rebase --onto master server client
    快进合并
    git checkout master 
    git merge client
    
    现在我们决定把 server 分支的变化也包含进来。我们可以直接把 server 分支
    衍合到 master,而不用手工切换到 server 分支后再执行衍合操作 
    — git rebase [主分支] [特性分支] 命令会先取出特性分支 server,
    然后在主分支 master 上重演:
    git rebase master server
    git checkout master 
    git merge server
    ```
    

    重置提交

    ```
    git reflog 查看提交历史
    git reset --hard HEAD 重置提交到某个节点
    ```
    

    重置提交信息

    ```
    修改最近一次的提交, 比如git commit -m "test01", 之后, 
    发现提交信息有误, 使用下面的命令修改
    git commit --amend
    如果已经提交到服务端, git pull 拉取代码, 合并提交信息, 再提交.
    ```
    

    切换至指定节点的代码库

    ```
    git log
    git checkout -[3e07fd8]
    ```
    

    git 子module

    ```
        
        // 1, 将另一个git项目, 添加到当前git项目中, 作为submodule存在
    
        git submodule add https://github.com/chaconinc/DbConnector 
    
        如果这时运行 git status,你会注意到几件事。
        
        // 2, 查看状态
    
        $ git status
        On branch master
        Your branch is up-to-date with 'origin/master'.
        
        Changes to be committed:
        (use "git reset HEAD <file>..." to unstage)
    
        new file:   .gitmodules
        new file:   DbConnector
        
        // 3, 查看.gitmodules文件, 该配置文件保存了项目URL与已经拉取的本地目录之间的映射
    
        $ cat .gitmodules
        [submodule "DbConnector"]
        path = DbConnector
        url = https://github.com/chaconinc/DbConnector
    
        // 4, 在 git status 输出中列出的另一个是项目文件夹记录。 如果你运行 git diff,会看到类似下面的信息:
    
        $ git diff --cached DbConnector
        diff --git a/DbConnector b/DbConnector
        new file mode 160000
        index 0000000..c3f01dc
        --- /dev/null
        +++ b/DbConnector
        @@ -0,0 +1 @@
        +Subproject commit c3f01dc8862123d317dd46284b05b6892c7b29bc
        
        /* 5, 
        虽然 DbConnector 是工作目录中的一个子目录,但 Git 还是会将它视作一个子模块。当你不在那个目录中时,Git 并不会跟踪它的内容, 而是将它看作该仓库中的一个特殊提交。
        如果你想看到更漂亮的差异输出,可以给 git diff 传递 --submodule 选项。
        */
        
        $ git diff --cached --submodule
        diff --git a/.gitmodules b/.gitmodules
        new file mode 100644
        index 0000000..71fc376
        --- /dev/null
        +++ b/.gitmodules
        @@ -0,0 +1,3 @@
        +[submodule "DbConnector"]
        +       path = DbConnector
        +       url = https://github.com/chaconinc/DbConnector
        Submodule DbConnector 0000000...c3f01dc (new submodule)
    
        // 6, 当你提交时,会看到类似下面的信息:
        $ git commit -am 'added DbConnector module'
        [master fb9093c] added DbConnector module
         2 files changed, 4 insertions(+)
         create mode 100644 .gitmodules
         create mode 160000 DbConnector
    
    ```
    

    克隆含有子模块的项目

    ```
        //1, 克隆含有submodule 的项目, 子模块默认为空目录, 需要初始化
        git clone https://gitee.com/wqc910605/MyDemos.git
        
        //2, 初始化和更新submodule 
        git submodule init 
        git submodule update
        
        //3, 或者 递归克隆
        git clone --recursive https://gitee.com/wqc910605/MyDemos.git
    ```
    

    在包含子模块的项目上工作

    ```
    //1, 如果想要在子模块中查看新工作,可以进入到目录中运行 git fetch 与 git merge,合并上游分支来更新本地代码。
    
    git fetch
    From https://github.com/chaconinc/DbConnector
       c3f01dc..d0354fc  master     -> origin/master
    $ git merge origin/master
    Updating c3f01dc..d0354fc
    Fast-forward
     scripts/connect.sh | 1 +
     src/db.c           | 1 +
     2 files changed, 2 insertions(+)
    
    //2, 如果你现在返回到主项目并运行 git diff --submodule,就会看到子模块被更新的同时获得了一个包含新添加提交的列表。 如果你不想每次运行 git diff 时都输入 --submodle,那么可以将 diff.submodule 设置为 “log” 来将其作为默认行为。
    
    git config --global diff.submodule log
    $ git diff
    Submodule DbConnector c3f01dc..d0354fc:
    > more efficient db routine
    > better connection routine
    
    //3, 如果你不想在子目录中手动抓取与合并,那么还有种更容易的方式。 运行 git submodule update --remote,Git 将会进入子模块然后抓取并更新。
    
    $ git submodule update --remote DbConnector
    remote: Counting objects: 4, done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 4 (delta 2), reused 4 (delta 2)
    Unpacking objects: 100% (4/4), done.
    From https://github.com/chaconinc/DbConnector
       3f19983..d0354fc  master     -> origin/master
    Submodule path 'DbConnector': checked out 'd0354fc054692d3906c85c3af05ddce39a1c0644'
    
    //4, 此命令默认会假定你想要更新并检出子模块仓库的 master 分支。 不过你也可以设置为想要的其他分支。 例如,你想要 DbConnector 子模块跟踪仓库的 “stable” 分支,那么既可以在 .gitmodules 文件中设置(这样其他人也可以跟踪它),也可以只在本地的 .git/config 文件中设置。 让我们在 .gitmodules 文件中设置它:
    
    $ git config -f .gitmodules submodule.DbConnector.branch stable
    
    $ git submodule update --remote
    remote: Counting objects: 4, done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 4 (delta 2), reused 4 (delta 2)
    Unpacking objects: 100% (4/4), done.
    From https://github.com/chaconinc/DbConnector
       27cf5d3..c87d55d  stable -> origin/stable
    Submodule path 'DbConnector': checked out 'c87d55d4c6d4b05ee34fbc8cb6f7bf4585ae6687'
    
    ```
    

    git清除用户名密码

    git config --system --unset credential.helper
    
    1. git 第一次关联远程仓库时, 提交冲突
    git init   // 初始化版本库
    
    git add .   // 添加文件到版本库(只是添加到缓存区),.代表添加文件夹下所有文件 
     
    git commit -m "first commit" // 把添加的文件提交到版本库,并填写提交备注
     
    git remote add origin 你的远程库地址  // 把本地库与远程库关联
     
    因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在git pull,
    这句代码是在git 2.9.2版本发生的,最新的版本需要添加--allow-unrelated-histories
    
    git pull origin master --allow-unrelated-histories
     
    git push -u origin master    // 第一次推送时
     
    git push origin master  // 第一次推送后,直接使用该命令即可推送修改
    

    git---如何解决The authenticity of host 'gitee.com (120.55.226.24)' can't be established

    Are you sure you want to continue connecting (yes/no)? yes
    
    在新生成密钥之后,在.ssh文件夹(之前的文章有提到过)中少了一个known_hosts文件,本来密钥文件应该是三个,现在是两个,便报了这样的错误,此时选择yes回车之后,便可,同时生成了缺少了的known_hosts文件:
    

    git配置ssh

    git config --global --list 查看git用户信息
    git config --global user.name '用户名'
    git config --global user.email '邮箱名'
    ssh-keygen -t rsa -C 'user.email' 一路回车下去 
    生成目录windows 和ios 都在~/.ssh目录下
    

    相关文章

      网友评论

          本文标题:git 常用命令

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