美文网首页
最全的git操作命令(持续更新)

最全的git操作命令(持续更新)

作者: 奔跑的痕迹 | 来源:发表于2021-10-24 10:16 被阅读0次

    当前使用git进行版本管理越来越频繁,但是难免还是有些命令记不全,曾当前闲暇记录一下,免得需要时漫天找寻

    一、 配置用户信息

    1、git config 【配置git 用户信息】

    配置git 用户信息

    
         # 设置提交代码时的用户信息
        $ git config [--global] user.name "用户名"
        $ git config [--global] user.email "邮箱地址"
    
        ## 如 $ git config [--global] user.name "jack"
        ## 如 $ git config [--global] user.name "jack@qq.com"
     
    
    

    2、git config --list 【查看配置】

    查看配置

        # 显示当前的Git配置
        $ git config --list
    

    3、git config -e【编辑配置】

    编辑配置

        # 编辑Git配置文件
        $ git config -e [--global]
    

    <font color=red>【注】</font>其中 --global 是进行全局配置,如果不指定该参数默认配置到当前目录下

    二、仓库初始化

    1、git init 【将当前目录初始化为git 代码仓库】

    将当前目录初始化为git 代码仓库

        $ git init
    

    2、git init [project-name]【新建一个目录,将其初始化为Git代码库】

    新建一个目录,将其初始化为Git代码库

        $ git init [project-name]
    

    3、 git clone【拷贝一个项目到本地】

    拷贝一个项目到本地

        $ git clone [url]
    

    如:$ git clone http://192.168.100.235:8000/test/git_test.git

    三、仓库管理

    1、git remote add origin 【与远程仓库建立连接】

    与远程仓库建立连接

    $ git remote add [origin] [url]origin映射远程仓库的别名 url 仓库路径

        $ git remote add origin http://192.168.100.235:8000/test/git_test.git   
    

    2、git remote rm origin【删除远程连接】

    删除远程连接

        $ git remote rm origin
    

    3、git remote set-url origin【更换远程仓库地址】

    更换远程仓库地址

    语法: git remote set-url <origin> <remoteUrl>

        $ git remote set-url origin http://192.168.100.235:8000/test/git_test.git
    

    4、git pull 【取回远程仓库的变化,并与本地分支合并】

    取回远程仓库的变化,并与本地分支合并

        $ git pull [remote] [branch]
    

    如 $ git pull origin devorigin对应的远程dev分支变动合并到本地dev

    5、git remote -v【显示所有远程仓库】

    显示所有远程仓库

        $ git remote -v
    

    四、状态管理

    1、git status【查看本地文件变更情况】

    查看本地文件变更情况

         $ git status
    

    五、把文件添加到暂存区

    1、git add . 【将修改和新增文件添加到缓存区】

    提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

         $ git add .
    

    2、git add -u 【将修改和被删除文件添加到缓存区】

    提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)

         $ git add -u  
    

    3、git add -A 【将全部改动添加到缓存区】

    是上面两个功能的合集(git add --all的缩写)

        $ git add -A 
    

    六、提交

    1、git commit 【提交暂存区到仓库】

    提交暂存区到仓库

     $ git commit -m "It is first committing."
    

    七、数据推送

    1、git push 【推送到远程仓库】

    将更改推送到远程仓库

    
        $ git push origin master:dev
    

    这个命令中
    origin: 指定远程仓库地址的别名

    master:选择推送到远程仓库的本地分支名称

    dev:指定推送到远程仓库的分支名称(可以省略,省略后默认和本地分支名相同)

    不指定远程分支推送:


    不指定远程分支推送

    指定远程分支推送:
    [图片上传失败...(image-50f1d1-1635041767442)]

    另一种操作:创建一个新的分支,并将其推送到远程仓库

    1、$ git branch -b dev
    2、 $ git push --set-upstream origin dev

    2、git tag 【打标签】

    1、为当前版本打一个标签
    git tag <tag name>

    ## git tag <tag name>
    $ git tag v1.0.0
    
    

    2、推送单个tag到仓库
    git push origin <tag name>

    ## git push origin <tag name>
    $ git push origin v1.0.0
    
    

    3、推送所有tag 到仓库
    git push --tags
    git push origin --tags

    $ git push origin --tags
    

    4、展示所有tag
    git tag

    ## git tag
    $ git tag
    
    

    5、搜索tag
    git tag -l 'v1.0.*'

    ## git tag -l 'v1.0.*'
    $ git tag -l 'v1.0.*'
    
    

    3、git tag -d [tag ]【删除标签】

    当需要删除某个tag 时可以执行
    git tag -d [tag ]

    如我想删除原本的 v1.0.0

    $ git tag
    v1.0.0
    
    ## git tag  -d [tag ]
    $ git tag -d v1.0.0
    Deleted tag 'v1.0.0' (was 0bcb84e)
    
    $ git push origin :v1.0.0
    To github.com:dengxiaoning/***.git
     - [deleted]         v1.0.0
     
    $ git tag
    
    

    看删除成功,再次查看就没有了

    八、分支管理

    1、git branch 【查看分支】

    查看分支

        $ git branch [-a]
    

    2、git branch branchName 【创建分支】

    创建分支

        $ git branch branchName
    

    3、git checkout 【切换分支】

    切换分支

        $ git checkout branchName
    

    4、git checkout –b【创建+切换分支】

    创建+切换分支

        $ git checkout –b branchName
    
    【 –b 】参数表示创建并切换,相当于如下2条命令
    

    git branch branchName, git checkout branchName

    5、git merge dev【合并某分支到当前分支】

    合并某分支到当前分支

    
         # 切换到Master分支
      git checkout master
    
      # 将dev合并到当前的master分支上来
      git merge  dev --no-ff
        
    

    注意:合并一个没有关联的分支可能会提示fatal: refusing to merge unrelated histories

    如:欲将master合并到main分支

    Lenovo@LAPTOP-UBL4APLU MINGW64 /d/learnReact/admin-v2-fe (main)
    $ git merge master
    fatal: refusing to merge unrelated histories
    

    这时可以在合并是增加一个参数--allow-unrelated-histories

    如:

    Lenovo@LAPTOP-UBL4APLU MINGW64 /d/learnReact/admin-v2-fe (main)
    $ git merge master --allow-unrelated-histories
    
    

    6、git branch –d 【删除(本地)分支】

    删除(本地)分支

        $ git branch –d branchName
    

    7、git push origin --delete【删除(远程)分支】

    删除(远程)分支

        ## origin:远程仓库别名   remoteBranch:远程分支名
        $ git push origin --delete remoteBranch
    

    [图片上传失败...(image-230613-1635041767442)]

    8、git branch -m 【本地分支重命名】

    本地分支重命名

        ## master :旧的本地分支名称   newbranchname:新的本地分支名
        $ git branch -m master newbranchname
    

    九、文件管理

    1、git diff 【比较修改文件的不同点】

    比较修改文件的不同点

    
        $ git diff modifyFileName
        
    

    注意:diff 后面需要全路径

    
    ### 查看当前修改状态
    $ 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:   src/App.vue
            modified:   src/components/HelloWorld.vue
            modified:   src/components/cesium_main.vue
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    Lenovo@LAPTOP-UBL4APLU MINGW64 /d/learnVUE/vue-join-cesium (master)
    
    ### 比较一下src/components/cesium_main.vue文件的差异
    $ git diff src/components/cesium_main.vue
    diff --git a/src/components/cesium_main.vue b/src/components/cesium_main.vue
    index dfa97a4..21c434b 100644
    --- a/src/components/cesium_main.vue
    +++ b/src/components/cesium_main.vue
    @@ -66,7 +66,7 @@
                     // var lonIncrement = 0.00025;
                     var initialLon = 103.33;
                     var lat = 30.06;
    -                var height = 857;
    +                var height = 17096;^M
    
    

    2、git rm -r 【删除远程仓库文件】

    删除远程仓库文件

    只删除远程仓库里的文件,保留本地缓存文件

    
        ## 1.执行删除
        $ git rm test.txt (删除文件)
        
        ## -r 是递归的意思   当最后面是文件夹的时候有用
        $ git rm -r test (删除文件夹)
        
        ## 2.提交修改
        
        $ git commit -m "Delete some files."
        
        ## 3.将修改提交到远程仓库的xxx分支:
        
        $ git push origin xxx
    
    

    十、日志

    1、git log 【查看commit日志】

    查看提交日志

        $ git log
    

    十一、还原与重置

    1、git checkout [file] 【恢复暂存区的指定文件到工作区】

    恢复暂存区的指定文件到工作区

        # 恢复暂存区的指定文件到工作区
        $ git checkout [file]
    

    2、git checkout [commit] [file] 【恢复某个commit的指定文件到暂存区和工作区】

    恢复某个commit的指定文件到暂存区和工作区

        $ git checkout [commit] [file]
    

    3、git checkout .【本地所有修改的。没有的提交的,都返回到原来的状态】

    本地所有修改的。没有的提交的,都返回到原来的状态【注意最后有个点】

        $ git checkout .
    

    4、git reset [file]【重置暂存区的指定文件,与上一次commit保持一致,但工作区不变】

    重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

        $ git reset [file]
    

    如:
    看我已将将两个有修改的文件提交到了缓存区

    已提交到缓存区

    当再次执行$ git reset cesium_index.html将会把该文件恢复到未add状态

    执行一下reset

    $ git reset cesium_index.html
    Unstaged changes after reset:
    M       cesium_index.html
    
    

    再检测下当前文件status

    看已经将一个文件恢复到了为提交状态
    看已经将一个文件恢复到了未提交状态

    5、git reset --hard【重置暂存区与工作区,与上一次commit保持一致】

    重置暂存区与工作区,与上一次commit保持一致

        $ git reset --hard
    

    6、 git reset [commit]【重置当前分支的指针为指定commit,同时重置暂存区,但工作区保持不变】

    重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变(就是将当前git add -A提交到缓存区的文件还原为

    没有git add 状态, 可以再次执行git add 和git commit 但是你ide中修改的内容依然保持你当前修改的状态)

        $  git reset [commit]
    

    [图片上传失败...(image-702279-1635041767442)]
    如 将当前commit 缓冲区还原到6791a964097f676ee603eb512ed7c96a5e9fd35c 这次提交
    [图片上传失败...(image-6e5917-1635041767442)]
    还原后

    在这里插入图片描述
    使用git status 查看,这是文件都处于修改,而未被 git add 加入缓冲区时的状态了

    7、 git reset --hard [commit]【重置当前分支的HEAD为指定commit,同时重置暂存区和工作区】

    重置当前分支的HEAD为指定commit,同时重置【暂存区】和【工作区】,与指定commit一致

        $  git reset --hard [commit]
    

        $  git reset --hard  a3cd9d264a2ab609a69637365ebd327757e4364a
    

    8、git reset --keep [commit]【重置当前HEAD为指定commit,但保持暂存区和工作区不变】

    重置当前HEAD为指定commit,但保持暂存区和工作区不变

    $ git reset --keep [commit]
    

    $  git reset --keep a3cd9d264a2ab609a69637365ebd327757e4364a
    

    9、 git revert [commit]【新建一个commit,用来撤销指定commit】

    新建一个commit,用来撤销指定commit
    

    后者的所有 变化都将被前者抵消,并且应用到当前分支

        $ git revert [commit]
    

        $ git revert a3cd9d264a2ab609a69637365ebd327757e4364a
    

    10、git stash【把所有没有提交的修改暂存到stash里面】

    把所有没有提交的修改暂存到stash里面。可用git stash pop恢复

        $ git stash
    

    example:

    1、保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令(这里可以使用save添加一个标识),就会发现当前是一个干净的工作区,没有任何改动。

    
    $ git stash save 'cache-change'
    Saved working directory and index state On dev: cache-change
    
    

    2、查看一下

    
    $ git stash list
    stash@{0}: On dev: cache-change
    
    

    3、查看当前工作区的改动情况

    
    $ git status
    On branch dev
    nothing to commit, working tree clean
    
    

    4、查看堆栈中最新保存的stash和当前目录的差异。

    $ git stash show
     .env.development                                   |  8 +-
     .eslintrc.js                                       | 13 +---
     src/api/patient.js                                 | 88 +++++++++++-----------
     src/components/TimeoutLock/custPwdInput.vue        | 10 +--
     src/router/index.js                                | 42 +++++------
     .../patient/inHospital/components/EmrRecord.vue    | 42 +++--------
     .../fullDayRecover/recoverList/partPanel.vue       |  2 +-
     src/views/patient/inHospital/index.vue             |  3 +-
     src/views/patient/outpatient/index.vue             |  3 +-
     9 files changed, 94 insertions(+), 117 deletions(-)
    
    

    5、将stash 合并到当前工作区

    $ git stash pop
    On branch dev
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   .env.development
            modified:   .eslintrc.js
            modified:   src/api/patient.js
            modified:   src/components/TimeoutLock/custPwdInput.vue
            modified:   src/router/index.js
            modified:   src/views/patient/inHospital/components/EmrRecord.vue
            modified:   src/views/patient/inHospital/index.vue
            modified:   src/views/patient/outpatient/index.vue
    
    no changes added to commit (use "git add" and/or "git commit -a")
    Dropped refs/stash@{0} (692af9f593ae972b2d2837bbe03f1550a9e0ae9d)
    
    

    如下为恢复指定的进度到工作区。stash_id是通过git stash list命令得到的。
    如:

    $ git stash pop stash@{0}
    
    

    再查看一下stash

    
    $ git stash list
    
    

    再查看一下当前工作区

    $ git status
    On branch dev
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   .env.development
            modified:   .eslintrc.js
            modified:   src/api/patient.js
            modified:   src/components/TimeoutLock/custPwdInput.vue
            modified:   src/router/index.js
            modified:   src/views/patient/inHospital/components/EmrRecord.vue
            modified:   src/views/patient/inHospital/index.vue
            modified:   src/views/patient/outpatient/index.vue
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    

    ok还原到当前工作区成功了

    注意:通过git stash pop命令恢复进度后,会删除当前进度 可以使用 git stash apply [–index] [stash_id]
    将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况。

    11、git reset --hard HASH【返回到某个节点,不保留修改】

    返回到某个节点,不保留修改。

        $ git reset --hard HASH 
    

    12、git reset --soft HASH【返回到某个节点。保留修改】

    返回到某个节点。保留修改

        $ git reset --soft HASH 
    

    13、git clean -df【返回到某个节点】

    返回到某个节点

        $ git clean -df
    

    参数配置
    -n显示 将要 删除的 文件 和 目录
    -f 删除 文件
    -df 删除 文件 和 目录

    如 查看日志为

    $ git log 
    commit c81325c83f4575ba6f09e52c8e664eedfbf37f39 (origin/master)
    Author: dxn <123456@qq.com>
    Date:   Sun Aug 4 21:41:53 2019 +0800
    
    commit f9be161a95963251f94f56244f476d3d49d44a40
    Author: dex <123456@qq.com>
    Date:   Sun Jul 28 08:10:41 2019 +0800
    
    commit 8ac8418ba5e959b8cd6ff2af8a5dc493524e957e
    Author: dex <123456@qq.com>
    Date:   Wed Jul 24 21:40:39 2019 +0800
    
    

    那要返到f9be161a95963251f94f56244f476d3d49d44a40这次提交
    直接执行 $ git reset --hard f9be161a95963251f94f56244f476d3d49d44a40 即可

    其实代码还原别小看在某些时候蛮管用,如你的代码和和远程仓库冲突时

    你也许会使用
    $ git pull origin master --allow-unrelated-histories
    参数--allow-unrelated-histories 把两段不相干的 分支进行强行合并

    但是会出现许多冲突,所以最后还是使用如下命令把HEAD恢复到最后提交的版本
    $ git reset --hard origin/master

    14、git reset --hard【删除提交log】

    可能有的的时候一不小心把一些敏感的信息提交到了GitHub,想着直接删除然后再次提交就可以了,错了不管怎么修改提交,原本的历史提交记录里面都能看到你原来的信息,那这种就得想办法删除掉提交的log日志了,

    1)使用git log 查看你提交的log
    找到在提交敏感信息前一次提交的commit

    提交日志
    如我提交敏感信息之前的一条是commit 3dd59032d8a21ce94532bf2e768bc027fec0d119 那我就可以直接重置到这条提交记录.....
    注意:这个reset 会把所有修改都重置会那次提交前的样子,所以你需要将数据拷贝一份放到一边,等重置完成后再用备份的数据覆盖还原的数据,再删除掉敏感数据,这样确保数据和最后一次提交一致,只是删除了不该提交的敏感数据

    2)开始还原

    $ git reset --hard 3dd59032d8a21ce94532bf2e768bc027fec0d119
    HEAD is now at 3dd5903 Merge branch 'master' of github.com:dengxiaoning/***
    
    

    3)然后在将记录强推到仓库(再次提醒备份了再推,不然数据找不回来)

    $ git push origin HEAD --force
    Total 0 (delta 0), reused 0 (delta 0)
    To github.com:dengxiaoning/
     + 2c3e1d1...3dd5903 HEAD -> master (forced update)
    
    

    4) 好了远程仓库还原成功了,现在用备份数据覆盖当前还原的数据,再删除敏感数据再次提交

    git add -A 
    git commit -m "删除敏感数据"
    git push origin master
    

    ok操作完成,仓库中已经找不到那条带有敏感数据的提交痕迹了

    好了大致就这些,谢谢浏览欢迎点赞,分享和关注谢谢

    相关文章

      网友评论

          本文标题:最全的git操作命令(持续更新)

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