根底命令

pwb,命令是用于显示以后的目录。
mkdir fileName 用于创立文件。
ls 用于显示以后文件列表。
cd filename 用于进入到指定文件 按tab键可补全输出。
../ 命令用于返回上一级目录。
删除空目录 rmdir 目录
删除文件夹 ,无论文件是否为空,应用-rf即可,即rm -rf 目录(删除就没法回收了,谨用!);-r:向下递归,不论有多少目录,一并删除。-f:强制删除,不做任何提醒。
强制删除文件 rm -f 目录名。
cd ~ 返回根目录
cat 查看

配置环境变量

vim ~/.bash_profile
笼罩
brew link --overwrite cocoapods

GIT

GIT init

a. mkdir filename;
b. $ git init 创立一个新的仓库, 在新建的文件夹下回创立一个.git 的目录。该目录用来跟踪治理版本库,如果没看到应用 ls -ah 就能够看到暗藏的文件;
c. $ git add . 把文件增加到仓库;
d. $ git commit -m "本次提交的阐明",把文件提交到仓库;胜利会提醒 1. n file changed (-文件被改变);n insertions (-文件被插入);

创立分支

git checkout -t origin/master -b feat-trusteeship // feat-trusteeship 为你本人起的分支名字

本地分支推送到近程

git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号后面的)分支到近程origin的feature-branch(冒号前面的)分支(没有会主动创立)
为推送以后分支并建设与近程上游的跟踪,git push --set-upstream origin feature-branch

工作区和暂存区

工作区 (worker directory)

就是你在笔记本上看到的目录文件 。

版本库(repository)

工作区暗藏一个目录.git,这个不算工作区,而是Git 版本治理库

Git版本治理库里存了好多货色,其中最重要的就是被称之为stage(或者叫index)暂存区。还有一个git给我主动创立的master,以及指向master的一个指针叫HEAD

后面咱们把文件往git版本库里增加的时候,分两步执行。

第一步是用git add把文件增加进去,实际上就是把文件批改增加到暂存区
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到以后分支

你能够简略了解为,须要提交的文件批改统统放到暂存区,而后,一次性提交暂存区的所有批改

GIT时光穿梭


版本回退 Git reset

像这样,你一直对文件进行批改,而后一直提交批改到版本库里,每当你感觉文件批改到肯定水平的时候,就能够“保留一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还能够从最近的一个commit复原,而后持续工作,而不是把几个月的工作成绩全副失落。

Git查看提交日志 git log

应用 git log 命令查看版本控制系统中文件从最近到最远的提交日志。

Git精简查看提交日志

git log --pertty=online命令查看 提交的精简日志。

$ git log --pretty=oneline1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPLe475afc93c209a690c39c13a46716e8fa000c366 add distributedeaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

Git 版本号

须要情谊提醒的是,你看到的一大串相似1094adb...的是commit id(版本号),

首先,Git必须晓得以后版本是哪个版本,在Git中,用HEAD示意以后版本,也就是最新的提交1094adb...

上一个版本就是HEAD^

上上一个版本就是HEAD^^

当然往上100个版本写100个^比拟容易数不过去,所以写成HEAD~100

Git版本回退

应用 $ git reset --hard HEAD^ 命令

Git回退到指定版本

$ git reset --hard 1094a(commit id);版本号没必要写全,前几位就能够了,Git会主动去找。

Git的版本回退速度十分快,因为Git在外部有个指向以后版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

┌────┐
│HEAD│
└────┘

└──> ○ append GPL

    │    ○ add distributed    │    ○ wrote a readme file       

改为指向add distributed:

┌────┐
│HEAD│
└────┘

│ ○ append GPL
│ │
└──> ○ add distributed

    │    ○ wrote a readme file         

如果有抵触,合作开发保留本地分支,暂存

查找commit id(版本号)

当你用$ git reset --hard HEAD^回退到add distributed版本时,再想复原到append GPL,就必须找到append GPLcommit id

应用 命令git reflog用来记录你的每一次命令;

总结

  • HEAD指向的版本就是以后版本,因而,Git容许咱们在版本的历史之间穿梭,应用命令git reset --hard commit_id。
  • 穿梭前,用git log能够查看提交历史,以便确定要回退到哪个版本。
  • 要重返将来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

Git治理批改

git diff HEAD -- filename命令能够查看工作区和版本库外面最新版本的区别:

Git撤销批改

办法一

git checkout -- filename命令的意思就是把文件filename 在工作区批改的全副撤销。这有两种状况:

一种是 filename 自批改后还没有被放到暂存区,当初,撤销批改就回到和版本库截然不同的状态

一种是 filename 曾经增加到暂存区后又作了批改,当初,撤销批改就回到增加到暂存区后的状态

总之,就是让这个文件回到最近一次git commitgit add时的状态

办法二

用命令git reset HEAD <file>能够把暂存区的批改撤销掉(unstage),从新放回工作区:

git reset命令既能够回退版本,也能够把暂存区的批改回退到工作区。当咱们用HEAD时,示意最新的版本。

场景1 :当你改乱了工作区某个文件的内容,想间接抛弃工作区的批改时,用命令git checkout -- file。

场景2 :当你岂但改乱了工作区某个文件的内容,还增加到了暂存区时,想抛弃批改,分两步,第一步用命令git reset HEAD filename,就回到了场景1,第二步按场景1操作。

场景3 :曾经提交了不适合的批改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到近程库。

Git删除文件

git rm filename 删除文件件,而后 git status 查看文件状态,确定之后 git commit -m '阐明文案'

若是删错文件能够应用 ,git checkout --filename ,一件还原文件,无论是批改的还是删除的。

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是批改还是删除,都能够“一键还原”。

Git近程仓库

增加近程仓库

当初的情景是,你曾经在本地创立了一个Git仓库后,又想在GitHub创立一个Git仓库,并且让这两个仓库进行近程同步,这样,GitHub上的仓库既能够作为备份,又能够让其他人通过该仓库来合作,真是一举多得。

初始创立仓库

git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/menyongkang/learnvue.git
git push -u origin master

查看近程库

git remote -v

增加近程库

关联一个近程库,应用命令git remote add origin 近程地址URL,比方 git remote add origin https://github.com/menyongkang/learnvue.git,

关联后, 应用命令git push -u origin master第一次把本地库的所有内容推送到近程库;

尔后,每次本地提交后,只有有必要,就能够应用命令git push origin master推送最新批改;

本地库的内容推送到近程,用git push命令,实际上是把以后分支master推送到近程

因为近程库是空的,咱们第一次推送master分支时,加上了-u参数,Git岂但会把本地的master分支内容推送的近程新的master分支,还会把本地的master分支和近程的master分支关联起来;

更改近程地址

git remote set-url origin 近程地址URL

或者更改 config 文件中的url。更换url后,git push。

从近程库克隆

假如咱们从零开发,那么最好的形式是先创立近程库,而后,从近程库克隆。

勾选Initialize this repository with a README,这样GitHub会主动为咱们创立一个README.md文件。创立结束后,能够看到README.md文件:

当初,近程库曾经筹备好了,下一步是用命令git clone克隆一个本地库:

$ git clone https://github.com/menyongkang/XXXX.gitCloning into 'gitskills'...remote: Counting objects: 3, done.remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3Receiving objects: 100% (3/3), done.

Git创立与合并分支

HEAD指向的就是以后分支;

当咱们创立新的分支,例如dev时,Git新建了一个指针叫dev,指向master雷同的提交,再把HEAD指向dev,就示意以后分支在dev上

不过,从当初开始,对工作区的批改和提交就是针对dev分支了,比方新提交一次后,dev指针往前挪动一步,而master指针不变。

如果咱们在dev上的工作实现了,就能够把dev合并到master上。Git怎么合并呢?最简略的办法,就是间接把master指向dev的以后提交,就实现了合并:

Git创立分支

创立dev分支,而后切换到dev分支; (基于稳固分支master创立分支)

$ git checkout -t origin/master -b feat-trusteeship // feat-trusteeship 为你本人起的分支名字

git checkout命令加上-b参数示意创立并切换,相当于以下两条命令:

$ git branch dev$ git checkout devSwitched to branch 'dev'

Git查看分支

git branch命令查看以后分支。

git branch命令会列出所有分支以后分支后面会标一个*号。

Git切换分支

应用 git checkout master命令示意切换到 master 分支。

最新版本的Git提供了新的git switch命令来切换分支

创立并切换到新的dev分支,能够应用:

$ git switch -c dev

间接切换到已有的master分支,能够应用:

$ git switch master

Git合并分支

应用 git merge 合并的指标分支命令。例如
dev分支的工作成绩合并master分支git merge dev

$ git merge devUpdating d46f35e..b17d20eFast-forward readme.txt | 1 + 1 file changed, 1 insertion(+)

git merge命令用于合并指定分支以后分支
留神到下面的Fast-forward信息,Git通知咱们,这次合并是“快进模式”,也就是间接把master指向dev的以后提交,所以合并速度十分快。

Git本次提交推送到指定分支

应用 git cherry-pick commit-id 命令。例如
dev分支的工作成绩推送到master分支

 git log git chckout master git pull git cherry-pick commit-id1, commit -id2 git push 

Git删除分支

应用 git branch -d 指标分支

$ git branch -d devDeleted branch dev (was b17d20e).

删除后,查看branch,就只剩下master分支了:

$ git branch* master

Git查看合并抵触状况

$ git log --graph --pretty=oneline --abbrev-commit

应用git log --graph分支合并图.

分支管理策略

Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息

合并

$ git merge --no-ff -m "merge with no-ff" dev;

请留神--no-ff参数,示意禁用Fast forward

因为本次合并要创立一个新的commit,所以加上-m参数,把commit形容写进去

合并分支时,加上--no-ff参数就能够用一般模式合并,合并后的历史有分支,能看进去已经做过合并,而fast forward合并就看不出来已经做过合并。

储备

把当前工作现场“储备”起来,等当前复原现场后持续工作:

应用$ git stash命令。

git status查看工作区,就是洁净的(除非有没有被Git治理的文件),因而能够释怀地创立分支来修复bug。

弹出暂存

把当前工作现场“储备”起来,等当前复原现场后持续工作:

应用$ git stash命令。

git status查看工作区,就是洁净的(除非有没有被Git治理的文件),因而能够释怀地创立分支来修复bug。

git 删除近程分支

git rm -r filename
git add .
git commit -m "rm filename"
git push

.gitignore 文件不失效

.gitignore只能疏忽原来没有被跟踪的文件,因而跟踪过的文件是无奈被疏忽的。因而在网页上能够看到target等目录的存在。
解决办法就是先把本地缓存删除(扭转成未track状态),而后再提交:

git rm -r --cached .
git add .
git commit -m ‘update .gitignore’

rebase 的应用

当近程的稳固分支有更新时,基于近程稳固分支创立的,以后分支想同步稳固分支的代码,则执行

  • 办法一:merge

git fetch origin

git merge origin/master

  • 办法二:是执行rebase来同步变动

git pull --rebase ,他相当执行:

git fetch origin

git rebase origin/master