美文网首页
Unix & Git基本命令

Unix & Git基本命令

作者: 阿敏其人 | 来源:发表于2016-05-30 22:08 被阅读537次

    Unix 常见指令

    (下面的file是指 文件名+后缀 的)

    • s –l 列出当前目录下的所有内容(文件\文件夹)

    • pwd 显示出当前目录的名称

    • cd 改变当前操作的目录

    • who 显示当前用户名

    • clear 清屏

    • mkdir dir_name 新建一个目录

    • touch file 新建一个文件(文件不存在才会新建)

    • open file/dir_name 打开一个文件\文件夹

    • 按一下tab键,可以自动补齐指令名称、文件名、文件夹名等

    • ls -ah 查看隐藏的文件

    • rm file 删除文件


    Git命令

    具体参考 git教程 - 廖雪峰的官方网站

    对于版本仓库,跟踪的文件的改动,而不是文件的内容。
    git的命令是区分大小写的。

    —— 创建git仓库

    • git init 初始化git仓库

    —— 把文件添加进git进行管理

    添加一个文件,两个步骤

    • 1、git add 文件名.后缀
    • 2、git commit -m"要添加的备注内容"
      (问题:忘记 -m后命令行弹出来的那些东西怎么弄)

    —— 怎么通过提交记录查看是否提交成功

    怎么看当前的提交是否提交到了git?有提交就有记录,通过查看记录

    • git log
      会显示的时间个当初提交的备注
    
    ### —— 查看详细的Log信息
    * git log --pretty=oneline
    
    amqrMBP:learngit amqr$ git log --pretty=oneline
    e15c6063a6c70728fcedf1b466e355a39cfb9242 the add under the GPL
    21f61335c295f9074cccec86cb2c0554b997700d allow add
    1c50901d96e3db42f4f91c68da02f630a8b62b29 first commit readme
    

    比如这样这一串 e15c6063a6c70728fcedf1b466e355a39cfb9242 是提交的版本号(id)

    —— 查看git的状态

    • git status
      如果显示 “nothing to commit, working directory clean”那么就代表是正常的,无任何冲突的
      是修改过,还是正常,还是冲突等

    —— 查看文件被修改的内容与之前的区别

    • git diff

    —— 版本回退

    • git reset --hard^
    • git reset --hard^^
    • git reset --hard~3

    在Git中,用HEAD表示当前版本。

    git reset --hard^ 表示往上回退一个版本
    git reset --hard^^ 表示往上回退两个版本
    git reset --hard 1c50901 表示回退到指定版本

    这个1c50901就是 git log --pretty=oneline 命令得到的那些版本的前面的一长串数字的前面几个数字,我们取一定的位数足以代表就可以了。

    amqrMBP:learngit amqr$ git log --pretty=oneline
    e15c6063a6c70728fcedf1b466e355a39cfb9242 the add under the GPL
    21f61335c295f9074cccec86cb2c0554b997700d allow add
    1c50901d96e3db42f4f91c68da02f630a8b62b29 first commit readme
    
    amqrMBP:learngit amqr$ git reset --hard HEAD^
    HEAD is now at 21f6133 allow add
    
    amqrMBP:learngit amqr$ git log --pretty=oneline
    21f61335c295f9074cccec86cb2c0554b997700d allow add
    1c50901d96e3db42f4f91c68da02f630a8b62b29 first commit readme
    amqrMBP:learngit amqr$ 
    
    

    —— 查看版本提交和回退的总的记录

    • git reflog
    amqrMBP:learngit amqr$ git reflog
    21f6133 HEAD@{0}: reset: moving to HEAD^
    e15c606 HEAD@{1}: commit: the add under the GPL
    21f6133 HEAD@{2}: commit: allow add
    1c50901 HEAD@{3}: commit (initial): first commit readme
    

    —— 回退后还怎么跳转到新的版本

    amqrMBP:learngit amqr$ git reflog
    21f6133 HEAD@{0}: reset: moving to HEAD^
    e15c606 HEAD@{1}: commit: the add under the GPL
    21f6133 HEAD@{2}: commit: allow add
    1c50901 HEAD@{3}: commit (initial): first commit readme
    
    amqrMBP:learngit amqr$ git reset --hard e15c606
    HEAD is now at e15c606 the add under the GPL
    

    ======= 以上算是小小地说了一下增删改查,接下说一下暂存区的概念 =====

    Git的版本库里存了很多东西,
    其中最重要的就是称为stage(或者叫index)的暂存区
    还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

    我们把文件往Git版本库里添加的时候,是分两步执行的:

    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

    你可以简单理解为,
    需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

    add和commit的操作对应的state和head简图.png

    具体学习点击这里

    —— 查看工作区和版本库的不同

    • git diff HEAD -- 文件名.后缀

    每次修改,如果不add到暂存区,那就不会加入到commit中。

    —— 撤销add到工作区的内容(只add到了工作区,还没有commit到branch)

    方法一:
    git checkout -- file 比如 git checkout -- readme.txt
    就可以把你刚刚add到暂存区的所修改的内容撤销掉,也可以相当于恢复到之前最新的commit的状态
    git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令 , 以后会涉及到的。

    方法二:

    • git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区
      比如 git reset HEAD readme.txt

    —— 已经把错误的内容add并且commit到了分支了,还可以补救吗?可以,前提是还没有推送到远程库。

    使用 git reset 补救(前提是还没有推送到远程库)。

    —— 删除提交到版本库的branch的文件(这这是删除版本库的,本地的还在,想删除本地的文件的话还需要自己删除)

    • git rm file
      比如 git rm test.txt

    —— 本地误删了一个文件,从版本拿到那个文件恢复过来到本地(前提是之前这个文件已经提交到版本库)

    • git checkout -- �file
      比如 git checkout -- test.txt
      git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以还原。

    ========= 接下来是建立远程仓库(和github结合) ==============

    建立远程仓库(和github结合)

    现在已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作

    首先电脑得有git这个不用说了,我们上面都可以用了肯定有git。

    前提准备:

    • git
    • github的账号

    接下里,就是需要 配 .ssh
    配好 .ssh之后就可以把绑定到github了
    配 .ssh 和 绑定github 请看这里

    绑定好之后,我们要知道一件事,把我们的仓库推到github有两种是

    • 一种是通过 https
    • 一种是通过 ssh

    我们上面的把ssh绑定到github就是为了通过ssh的方式把仓库推到github

    这里说明一点,按照廖雪峰的方式以ssh的方式push,推送失败,但是只要在

    The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
    RSA key fingerprint is xx.xx.xx.xx.xx.
    Are you sure you want to continue connecting (yes/no)?
    

    这个地方写上 yes
    就可以顺利地推到github了。

    对于以前已经弄过了ssh,怎么查看当初填写的邮箱名?

    打开 .ssh文件夹的 id_rsa.pub ,在文本的最后面就可看到 邮箱名字。

    Git的仓库克隆

    git clone 后面加远仓库的https或者ssh链接

    Paste_Image.png

    类似于下面这样子:

    $ git clone git@github.com:michaelliao/gitskills.git
    Cloning into 'gitskills'...
    remote: Counting objects: 3, done.
    remote: Total 3 (delta 0), reused 0 (delta 0)
    Receiving objects: 100% (3/3), done.
    
    $ cd gitskills
    $ ls
    README.md
    

    分支管理

    • 查看分支:git branch

    • 创建分支:git branch <name>

    • 切换分支:git checkout <name>

    • 创建+切换分支:git checkout -b <name>

    • 合并某分支到当前分支:git merge <name>

    • 删除分支:git branch -d <name>

    分支具体参见

    查看冲突合并情况

    合并时出现冲突

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

    查看冲突的原因:

    $ git status
    # On branch master
    # Your branch is ahead of 'origin/master' by 2 commits.
    #
    # Unmerged paths:
    #   (use "git add/rm <file>..." as appropriate to mark resolution)
    #
    #       both modified:      readme.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    

    解决冲突后 查看冲突合并情况

    • git log --graph
    $ git log --graph --pretty=oneline --abbrev-commit
    *   59bc1cb conflict fixed
    |\\
    | * 75a857c AND simple
    * | 400b400 & simple
    |/
    * fec145a branch test
    ...
    

    --no-ff的方式merge (保留历史)

    储存工作和和恢复工作区

    • git stash 储存工作区
    • git stash list 查看储存的工作区列表
    $ git stash list
    stash@{0}: WIP on dev: 6224937 add merge
    

    ** 恢复两个办法:**

    方法一:是用git stash apply恢复,但是恢复后,stash内容并不删除,然后你需要用git stash drop来删除;

    • git stash apply
    • git stash drop

    方法二:另一种方式是用git stash pop,恢复的同时把stash内容也删了:

    • git stash pop
    
    $ git stash list
    stash@{0}: WIP on dev: 6224937 add merge
    

    强行删除还没合并的分支

    • git branch -D �分支名

    多人开发

    • 查看远程库信息,使用git remote -v;

    • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

    • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

    • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

    • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

    • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

    给分支打上标签

    • 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

    • git tag -a <tagname> -m "blablabla..."可以指定标签信息;

    • git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;

    • 命令git tag可以查看所有标签。

    • 命令git push origin <tagname>可以推送一个本地标签;

    • 命令git push origin --tags可以推送全部未推送过的本地标签;

    • 命令git tag -d <tagname>可以删除一个本地标签;

    • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

    相关文章

      网友评论

          本文标题:Unix & Git基本命令

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