• Git超详细常用命令


    Git是目前世界上最先进的分布式版本控制系统。

    创建仓库(Repository)

    一般的在实际项目中创建仓库有一个简单的方法:
    在一个自己需要的目录下

    $ git clone https://github.com/Stupidbird836/designPattern.git
    

    到目录下查看

    同时我们到该文件夹下

    $ cd designPattern/
    $ git remote -v
    origin  https://github.com/Stupidbird836/designPattern.git (fetch)
    origin  https://github.com/Stupidbird836/designPattern.git (push)
    


    那么我们在实际项目之外的时候应该怎么创建一个仓库呢?

    到一个目录下

    $ cd ..
    $ mkdir gitinit
    $ cd gitinit/
    $ git init
    Initialized empty Git repository in E:/git/gitinit/.git/
    

    当前目录下还有生成一个.git的隐藏文件夹,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了

    在这里插入图片描述

    到这里,我们的一个简单的仓库已经创建完成了

    搞点事情

    下面我们在仓库里面做一些事情
    创建一个write.txt
    写一些东西

    查看是否有文件未提交
    $ git status
    On branch master
    
    No commits yet
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
        write.txt
    
    nothing added to commit but untracked files present (use "git add" to track)
    

    在这里插入图片描述

    提交到暂存区
    $ git add .
    
    提交到仓库
    $ git commit -m "write something"
    

    在这里插入图片描述

    创建远程仓库
    $ git remote add origin 远程地址
    
    提交到远程仓库
    $ git push origin master
    
    这里需要注意一下:你add的是你需要push 后面的名字(暂且这样解释)
    比如:$ git remote add aaaa 远程地址
    $ git push aaaa master
    

    在这里插入图片描述

    一个正常的没有错误的提交逻辑大约是:

    查看有没有需要提交的文件
    $ git status
    添加到暂存
    $ git add .
    或者添加一个文件到暂存
    $ git add 具体的文件名
    提交到本地仓库
    $ git commit -m "提交描述"
    这里其实就可push,但是你不能保证在你操作的期间别人有没有在该分支做过提交所以最好先
    $ git pull origin 分支名
    如果有冲突,就先解决冲突,然后从第一条命令开始
    没有冲突那就提交到远程
    $ git push origin 分支名
    

    但是谁都不能保证每次都能顺利进行


    版本回退

    对write.txt文件进行修改,增加一行

    内容为two line.

    $ 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:   write.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    $ git add .
    

    $ git commit -m "two line"
    [master 56cb32a] two line
    1 file changed, 2 insertions(+), 1 deletion(-)
    

    在这里插入图片描述

    想回退你就得知道你的提交日志

    $ git log
    commit 56cb32a525480cb6612d152c927a027834e90f7c (HEAD -> master)
    Author: huchenfei <huchenfei@chunbo.com>
    Date:   Wed Jan 9 17:00:05 2019 +0800
    
        two line
    
    commit 5ba4de5ad731fae4eb0b2fdfabcb69fc59862e64
    Author: huchenfei <huchenfei@chunbo.com>
    Date:   Wed Jan 9 16:43:45 2019 +0800
    
        write something
    

    现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,这里有两种命令可以选择

    git reset --hard HEAD^

    那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。但是弊端很明显,10次,50次之前的怎们办呢?

    git reset --hard HEAD~100

    该命令可以直接回退到100次之前

    开始回退
    $ git reset --hard HEAD^
    HEAD is now at 5ba4de5 write something
    
    huchenfei@PEK1-3VSRW22 MINGW64 /E/git/gitinit (master)
    $ cat write.txt
    one line
    

    只有最开始的 one line,第二次的two line已经被回退了

    在这里插入图片描述

    你可能发现了,这个日志太可怕了,有种总有刁民想害朕的即视感。我的回退记录没有,这可怎么办呢?

    别急

    $ git reflog
    5ba4de5 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
    56cb32a HEAD@{1}: commit: two line
    5ba4de5 (HEAD -> master) HEAD@{2}: commit (initial): write something
    

    刁民无处遁新

    在这里插入图片描述

    回退错了,我不想回退了怎么办。

    看上面,不是已经把提交的版本号打出来了吗 56cb32a,是我们提交two line的版本号

    $ git reset --hard 56cb32a
    

    在这里插入图片描述

    Git撤销修改和删除文件操作

    天有不测风云,人有旦夕祸福,我正在奋笔疾书的写代码,突然我发现我写错位置了,但是改动的地方有很多,我没办法一点一点的删除修改的地方,怎么办??
    在write.txt中加入three line

    $ 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:   write.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    $ git checkout -- write.txt
    -- 很重要,没有--的话就成了切换分支了
    

    $ cat write.txt
    one line
    two line
    

    这种情况使用我还没有添加到暂存区,如果你已经添加到暂存区了,那你就可以选择通过回退来进行,无论你是删除了文件还是增加了文件,只要你还么有添加到暂存区,都可以使用这种方法

    创建与合并分支

    上面我们都是在master的分支上进行操作的,但是实际的生产中,我们并不允许直接在master上做代码的修改,那么我们该怎么办?

    $ git branch 分支名
    这里需要注意,注意你当前的分支,你在哪个分支下,你就会创建一份和当前分支一模一样的代码的另一个分支
    所以一般我们创建分支的时候需要先切换分支到master上(特殊情况除外)
    

    $ git checkout master
    $ git branch aaaa
    这样aaaa分支上的代码和master上的代码是完全一致的
    

    在这里插入图片描述

    删除分支:
    一个项目结束之后,我们通常会选择释放分支,即删除分支,这个也不是必须的,只不过当你在本地仓库和远程仓库看到n年之前的分支还在那里,不显得很累赘吗?

    删除分支,不能再要删除分支下操作

    $ git branch -d aaaa
    删除本地分支
    $ git push origin :aaaa
    :为必须要素,删除远程分支
    

    当我们在我们自己的分支上做完功能之后,需要上线,这时候代码需要合并到master分支上

    $ git checkout master
    $ git merge --no-ff aaaa
    

    同样的,如果我们需要同步master 的代码到我们自己的分支上

    $ git checkout aaaa
    $ git merge --no-ff master
    
    • 查看分支:git branch

    • 创建分支:git branch 分支号

    • 切换分支:git checkout 分支号

    • 创建+切换分支:git checkout –b 分支号

    • 合并某分支到当前分支:git merge 分支号

    • 删除分支:git branch –d 分支号

    附一份我工作中常用到的git命令

    生成密钥:

    $ ssh-keygen -t rsa
    或者
    $ ssh-keygen -t rsa -C "your_email@youremail.com"
    

    查看当前git的用户民和邮箱:

    $ git config user.name
    huchenfei
    $ git config user.email
    ***********
    

    修改当前git的用户名和邮箱:

    $ git config --global user.name "your name"
    $ git config --global user.email "your email"
    

    git pull/push不需要输入密码

    如果是https的连接需要下面的操作
    $ git config --global credential.helper store
    $ git pull
    输入账号密码
    $ git pull 这是就不需要了
    
    如果是ssh的连接
    需要把ssh key放到git上
    

    Git查看配置:

    $ git config --list
    $ git config --global push.default simple
    $ git config --global merge.ff false
    

    基于某分支创建新分支:

    $ git branch xxxx
    $ git checkout xxxx
    $ git push origin xxxx
    

    检出分支:

    $ git fetch
    $ git checkout xxxx
    

    提交代码:

    $ git checkout xxxx
    $ git add -A    或者    git add .   或者    git add 具体的修改文件
    $ git commit -m "abcdefg"
    $ git push origin xxxx
    

    结束分支(把代码合并到master分支):

    $ git checkout xxxx
    $ git pull origin xxxx
    $ git checkout master
    $ git pull origin master
    $ git merge --no-ff xxxx
    $ git push origin master
    

    删除本地分支:

    $ git branch -d xxxx
    

    删除远程分支:

    $ git push origin  :xxxx
    

    合并(把源分支的代码合并到目标分支):

    $ git checkout 源分支名
    $ git pull origin 源分支名
    $ git checkout 目标分支
    $ git pull origin 目标分支名
    $ git merge --no-ff 源分支名
    $ git push origin 目标分支名
    

    恢复以前的代码:

    $ git reset --hard HEAD 	代码没有commit之前,恢复到上一次commit的代码。
    $ git reset --hard HEAD^ 	还没有push之前,撤销最新的commit,代码恢复到上上一次的commit。
    $ git reset --soft HEAD^ 	还没有push之前,撤销最新的commit,代码不变。
    

  • 相关阅读:
    mysql数据库的备份和恢复
    安装docker17.06.0版本报错和解决方法
    mysql随笔系列-1
    22_redis哨兵主备切换的数据丢失问题:异步复制、集群脑裂
    21_redis哨兵架构的相关基础知识的讲解
    19_对项目的主从redis架构进行QPS压测以及水平扩容支撑更高QPS
    18_在项目中部署redis的读写分离架构(包含节点间认证口令)
    17_redis replication的完整流运行程和原理的再次深入剖析
    16_redis主从复制原理、断点续传、无磁盘化复制、过期key处理
    15_redis replication以及master持久化对主从架构的安全意义
  • 原文地址:https://www.cnblogs.com/hcf-fcl/p/11199708.html
Copyright © 2020-2023  润新知