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分支上提交更改。
你可以简单理解为,
需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
—— 查看工作区和版本库的不同
- 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>可以删除一个远程标签。
网友评论