第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 apply
和git 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中