根底命令
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 GPL
的commit 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 commit
或git 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