git学习笔记

Posted by Daryl on December 30, 2017

第N次学习git…
12-23创建 12-30更新

Git学习笔记

安装完git之后,首先要做的是配置自己的用户名和邮箱地址

git config --global user.name "My Name"
git config --global user.email "email@example.com"

检查状态

git status命令检查状态。其输出结构可以告诉我们,仓库中哪些文件被修改了,已经加到暂存区等信息。

git diff命令检查具体的修改情况。

git log命令可以查看提交的历史记录(从近到远逐行显示)。加上命令--pretty=oneline之后可以减少不必要的信息。其中一大串类似于乱码的东西是版本号。

初始化版本库

在目录下用git init语句即可。当前目录下会多出一个.git文件夹,这是用来跟踪管理库版本的。

将一个文件放入git仓库中的步骤

git add readme.txt
git commit -m "add readme"

其中add是将文件添加到暂存区,commit则是提交。可以add多次,最后一起commit。commit的参数-m之后加的是本次提交说明,也可以不写,但为了可读性最好加上。

版本回退

在git中,用HEAD表示当前版本。上一个版本用HEAD^表示,上上个版本用HEAD^^表示。前一百个版本可以用HEAD~100来表示。

要回退版本可以用命令git reset --hard HEAD^。这比奥斯回退到上一个版本。此外还可以用版本号来指定回退的版本(版本号一般只需写前几位,git会自动补全)。用指定版本好的方法,还可以回到回退前的版本。

但是如果用git reset --hard HEAD^回退到了上一个版本,但是又想回去,而此时已经没有版本号了,应该怎么办?可以用git reflog命令来看每一次git命令找到对应的版本号。

了解暂存区、工作区、分支等概念

工作区就是整个文件夹。

隐藏目录.git不是工作区,而是git的版本库。里面存了很多东西,比如一个被称为stage的暂存区,git自动创建的第一个分支master,以及一个指向master分支的指针HEAD。

git add所做的是把文件添加到暂存区,而git commit做的是把暂存区中所有内容提交到当前分支。

git diff是工作区(wd)和暂存区(stage)的比较,而git diff --cached是暂存区(stage)和分支(master)的比较。

撤销修改

撤销工作区的修改。git checkout -- readme.txt 可以让readme.txt会到最近一次 git add 或 git commit 时的状态。

撤销暂存区的修改。git reset HEAD readme.txt可以把暂存区的修改回退到工作区,相当于撤销所有的 git add。

如果提交到了版本库,使用版本回退即可( git reset --hard HEAD^ )。

删除文件

在工作区中把不要的文件删除后。如果是误删,则只需要撤销工作区的修改,用 git checkout 将版本库中的版本替换工作区中版本。

如果想把版本库中的文件也删掉,可以用git rm man将相应的文件删掉,然后再 git commit。

远程仓库

基本操作是建立ssh秘钥。然后可以在github上浪了。如果要建立私密仓库,可以用github的收费功能,也可以自己创建git服务器。

添加远程库

To be continued… 【暂时不想写了

17.12.30 更新

首先在GitHub上创建一个新的repo

然后要把本地的库关联到远程库,使用命令 git remote add origin git@github.com:dddddavy/newrepo.git 当然也可以使用其他的server-name:path/repo-name.git

关联完之后需要把本地某分支的所有内容都推送到远程库,使用命令 git push -u origin master

此后每次本地提交后,如果要推送到远程库,就只需命令 git push origin master

从远程库克隆

命令:git clone git@github.com:dddddavy/newrepo.git

分支管理

创建和合并

查看分支信息 git branch
创建dev分支 git branch dev
切换到dev分支 git checkout dev
以上两条可以合并成 git checkout -b dev

然后可以在dev分支上修改工作区 然后add和commit。修改完后再切换回master分支。此时,master分支中看不到任何dev中的修改。在master分支中使用命令 git merge dev 可以合并dev分支
merge的时候也可以加上参数 --no-ff 这样在merge的时候就会生成新的commit

然后可以把dev分支删掉 git branch -d dev

解决冲突

某些情况下,git无法执行快速合并,然后就有可能发生冲突。merge冲突之后,可以查看冲突的文件,git会用某种格式标记出不同的内容,我们只需要修改这部分即可。

修改完后,将冲突的文件add 再commit,就可以成功合并了。

合并完后,可以用git log查看合并情况:
git log --graph --pretty=oneline --abbrev-commit

临时存储

如果需要紧急创建一个新的分支,但是这个分支还没有提交,可以用 git stash 将现场保存起来,这是再看工作区是干净的。

要恢复这个现场,可以用git stash applygit stash drop
也可以合并成git stash pop

也可以用git stash list看stash内容
然后git stash pop stash@{0}指定需要恢复的现场


自定义git

git config 可以设置git的其他配置 比如color.ui等

gitignore

可以在GitHub上找repo 还可以自己添加配置

在gitignore里面的文件不能被add

配置别名

git config --global alias.xx "...." 命令配置git别名

之前用的config配置都是针对整个用户的(加了–global参数)。如果不加,则只对当前repo起作用。
当前repo的配置都在.git/config中。

当前用户的配置在~/gitconfig中