zoukankan      html  css  js  c++  java
  • Git常用命令总结

    首先说一句,git跟踪并管理的是修改,而非文本。(18年的五四青年节,今天在做好一个项目的需求之后,需要重置工作区的修改,还有从远程上克隆下来(git clone url 默认是只会克隆master分支下的东西),然后再新建一个分支干活,干完活之后再提交到新建分支上,然后再提merge请求,进行合并,这里再简单复习一下git的命令,还有补充总结一下)

    这里有一个简化的图,有助于更好的操作git。
    git工作区,暂存区的关系
    这里有一些常用的命令,总结一下,以便日后查看。

    撤销工作区里面所做的修改(修改本地仓库中的文件后,执行git add之前)
    git checkout -- filename(readme.txt):这个命令是将工作区里面的修改全部撤销。这里有两种情况:

    • 在工作区中修改之后,还没有提交到暂存区,执行git checkout -- readme.txt之后,会回到工作区之前没有修改的状态
    • 在工作区中修改后已经提交到暂存区,然后又做了修改,这时候执行git checkout -- readme.txt之后,会回到提交到暂存区的状态
      总的来说,git checkout -- filename这个命令会将文件退回到最近一次的git commit或者git add时的状态。这个过程可以使用git status查看版本库的状态

    撤销暂存区里面所做的修改(执行git add 之后,git commit之前)
    git reset HEAD filename(readme.txt):可以撤销暂存区里面的修改到工作区,git reset也可以回退版本。这个过程也可以使用git status查看版本库的状态

    撤销已经从暂存区提交到版本库的修改(执行git commit之后,git push之前)
    在这个过程中,版本控制系统可以告诉我们的历史记录,这个命令是git log,可以查看git commit的历史记录。

    $ git log
    commit 3628164fb26d48395383f8f31179f24e0882e1e0
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Tue Aug 20 15:11:49 2013 +0800
    
        append GPL
    
    commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Tue Aug 20 14:53:12 2013 +0800
    
        add distributed
    
    commit cb926e7ea50ad11b8f9e909c05226233bf755030
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Mon Aug 19 17:51:55 2013 +0800
    
        wrote a readme file
    

    如果觉得输出信息有点乱的话,可以添加--pretty=oneline参数

    $ git log --pretty=oneline
    3628164fb26d48395383f8f31179f24e0882e1e0(这一串数字是commit id,即版本号) append GPL
    ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
    cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
    

    版本回退
    既然是版本回退,就需要知道当前是出于哪个版本,一般当前的是HEAD,上个版本是HEAD,上上个版本是HEAD^,上100个版本可以是HEAD~100.
    git reset --hard HEAD^ : 用于回退到当前版本的上一个版本
    git reset --hard HEAD^^:用于回退到当前版本的上上个版本
    git reset --hard 版本号:用于回退到指定的版本号
    当你回退到之前的某个版本,然后下班回家了,明天早上想回到未来的某个版本,可以使用git reflog查看版本号
    git reflog : 记录你执行的每一次命令,以确定回到未来的哪个版本

    1.git reset HEAD filename
    2.git checkout --filename

    上面这两步一起使用:适用于不但改乱了工作区某个文件的内容,还添加到暂存区,想丢弃修改的情况。
    
    `git  reset --hard HEAD^^` :
    回退到当前版本的上上个版本(前提是没有推送到远程仓库)
    
    `git remote add origin 远程仓库的地址` :将本地的仓库与github的仓库想关联。
    `git fetch`命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,确定好了,自己手工合并`git merge`
    `git clone` 克隆一个仓库,会自动将远程仓库归于origin下,git fetch origin  会抓取从你克隆以来别人上传到远程仓库中的所有更新。初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,且状态为未修改,在编辑过某写文件之后,Git将这些文件标为已修改。还有克隆之后,本质上自动创建本地master分支用于跟踪远程仓库中的master分支。
    `git clone -b 分支名 仓库地址`:克隆远程某个分支到本地
    `git diff` :比较工作目录中当前文件和暂存区域中快照之间的差异
    `git diff --cached`  查看已经暂存起来的文件和上次提交的时候的快照之间的差异
    注意:从git中移除某个文件,必须从暂存区中移除,然后提交。
    `git rm` :从工作目录中删除指定的文件,以后就不会出现在未跟踪文件清单中。
    `git rm --cached readme.txt` 移除跟踪但不删除文件
    `git remote show [remote-name]`: 查看远程仓库详细信息
    `git remote rm`  :删除远程仓库,当然不止这一种方法。
    `git branch [branch-name]` :创建一个分支,但不会切换到此分支下,还是在master分支下。
    `git checkout [branch-name]`: 切换分支(注意:最好保持一个清洁的工作区域之后再切换分支)
    `gitk -a`:运行这个命令可以打开一个图形界面,可以看到清晰的历史记录,不同分支之间的关系情况。
    `git merge 分支名(aa)`:将某个分支aa合并到当前分支
    `git pull 远程主机名 远程分支名:本地分支名`:取回远程主机名的某个分支的更新,再和本地指定分支进行合并,如果远程分支是和当前分支名进行合并,则本地分支名可以省略。
    `git push 远程主机名 本地分支名:远程分支名`:注意分支推送顺序和git pull的区别,如果省略远程分支名,是将本地分支推送到与之存在跟踪关系的远程分支,如果不存在则会创建。
    `git rebase 分支名(bb)`:将bb分支合并到当前分支
    ####另附两个讲的详细的链接
    https://www.cnblogs.com/marblemm/p/7161614.html 这个链接是讲的git merge和git rebase的区别,讲的挺详细的。
    https://www.zhihu.com/people/caseby/answers 这篇文章写得很好,在开发过程中使用git merge还是git rebase,优缺点是什么。
  • 相关阅读:
    实验一 命令解释程序
    复利计算器3.0更新版
    复利计算器3.0总结
    复利计算器2.0
    0414复利计算5.1-美观、输入更新
    0408结对汉堡-结对2.0
    0406复利计算程序5.0-结对编程
    《构建之法》第四章读后感
    复利计算4.0-单元测试
    操作系统实验一、 命令解释程序的编写
  • 原文地址:https://www.cnblogs.com/sminocence/p/8451266.html
Copyright © 2011-2022 走看看