git 一些原理和概念
在本地有三个区域:工作区,staged 区以及本地仓库,当然还有一个抽象的概念的就是分支
远程有:远程仓库和分支
HEAD 是个指针,指向 git 自动帮我们创建的第一个分支 master。master 才指向提交的,提交到远程
> 几乎所有的操作的都是基于以上的区域的,值得一提一点:本地的 git 仓库和 github 仓库之间的传输是通过 SSH 加密的
git初始化
git init在目录下面新建一个git 仓库
git 添加操作
git add 添加到 staged 暂存区,加入也意味着可以 track 追踪文件的变化状态,可以是git add “file name” 或者添加整个目录git add .
git commit 提交到本地的仓库的当前分支,加参数-m(message)
添加提交信息,-a(all)
则省略add操作直接提交到仓库。
git push origin master 提交到远程仓库的默认库的 master 分支
git push -u origin master,把本地库的内容推送到远程,用 git push 命令,实际上是把当前分支 master 推送到远程。由于远程库是空的,我们第一次推送 master 分支时,加上了-u 参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令。git push origin master
git 查看操作
git log 查看提交历史,–pretty=oneline 每个版本信息放到一行显示,分支历史也可以用这个命令查看
git reflog 可以查看命令历史,re-reset 操作可以从其中找到 ID,恢复到最新版本
git status 查看一下现有状态,针对本地库
用 git diff HEAD – file 命令可以查看工作区和版本库里面最新版本的区别,git diff什么都没加表示查看当前repository与暂存区的差别。
用 git log -–graph 命令可以看到分支合并图
git 还原操作
git checkout –file 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
命令 git rm 删掉,并且 git commit,此为彻底删除操作
用命令 git reset HEAD file,git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用 HEAD 时,表示最新的版本
head 为当前版本,head^是上一个版本,head^^是上上个版本,用 HEAD~100 代表 100 个版本之前 git reset –hard HEAD^回到上一个版本,git reset –hard ,加 ID 比较通用,HEAD 就指向那个 ID 了
git 分支操作
git checkout -b dev,git checkout 命令加上-b 参数表示创建并切换 dev 分支
dev 分支的工作完成,我们就可以切换回 master 分支:git checkout master
用 git branch 命令查看当前分支
git branch -d dev 用来删除 dev 分支操作
git merge branchname 命令用于合并指定分支到当前分支准备合并 dev 分支,请注意–no-ff 参数,表示禁用 Fast forward。通常,合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息。比如 git merge –no-ff -m “merge with no-ff” dev
如果要丢弃一个没有被合并过的分支,可以通过 git branch -D 强行删除
git-rebase +命令主要用在从上游分支获取最新 commit 信息,并有机的将当前分支和上游分支进行合并,可能会出现冲突
git checkout - 切换回上一个分支。
git 远程操作
git clone [url] 克隆一个远程仓库到本地
当你从远程仓库克隆时,实际上 Git 自动把本地的 master 分支和远程的 master 分支对应起来了,并且,远程仓库的默认名称是 origin
查看远程库信息,使用 git remote -v;git remote add [url]本地仓库关联远程分支,url就是网络仓库地址如git@github.com:LonglyCode/LonglyCode.github.io.git
;
从本地推送分支,使用 git push origin branch-name,第一次推送最好加上-u
参数;如果推送失败,先用 git pull 抓取远程的新提交;
在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用 git branch –set-upstream branch-name origin/branch-name;
从远程抓取分支,使用 git pull,如果有冲突,要先处理冲突。
git fetch:相当于是从远程获取最新版本到本地,不会自动 merge,= git pull 相当于 git fetch + git merge =
git 标签操作
Git 的标签虽然是版本库的快照,但其实它就是指向某个 commit 的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的
命令 git tag 用于新建一个标签,默认为 HEAD,也可以指定一个 commit id;
git tag -a -m “blablabla…”可以指定标签信息;
git tag -s -m “blablabla…”可以用 PGP 签名标签;
git tag 可以查看所有标签;
git push origin 可以推送一个本地标签;
git push origin –tags 可以推送全部未推送过的本地标签;
git tag -d 可以删除一个本地标签;
git push origin :refs/tags/可以删除一个远程标签
MISC
Git 还提供了一个 stash 功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作,你可以多次 stash,恢复的时候,先用 git stash list 查看,然后恢复指定的 stash,git stash pop 用来恢复,恢复的同时把 stash 内容也删了
在 GitHub 上,可以任意 Fork 开源仓库;自己拥有 Fork 后的仓库的读写权限;可以推送 pull request 给官方仓库来贡献代码。
git config –global alias.st status,用来设置别名减少操作,现在 git st就代表了 git status了
ssh-keygen -t rsa -C “my@email.com” 设置SSH
Author
LonglyCode
LastMod
2016-01-24
License
CC BY-NC-ND 4.0
Please enable JavaScript to view the comments powered by gitment.