avatar

目录
Git笔记

参考:《廖雪峰Git教程》
http://www.liaoxuefeng.com/

[toc]

创建版本库

创建账户​

Code
1
2
3
4
5
6
7
8
$ git config --global user.name "Your Name"
​$ git config --global user.email "email@example.com"

​$ git config --global user.name "machine"
​$ git config --global user.email "hhdwwt@163.com"
```

查看自己的用户名和邮箱地址:

$ git config user.name
$ git config user.email

Code
1
## 创建仓库

​$ mkdir learngit
​$ cd learngit
​$ pwd
​/c/Users/Machine/learngit

Code
1
## 管理仓库

​$ git init
​Initialized empty Git repository in C:/Users/Machine/learngit/.git/
​如果你没有看到.git目录,那是因为这个目录默认是隐藏的

Code
1
## 添加文件到仓库

​readme.txt放到learngit目录下(子目录也行)
​$ git add readme.txt
​$ git commit -m “wrote a readme file”
​​-m后面输入的是本次提交的说明
将所有文件添加到缓存区
$ git add *

Code
1
2
3
4
5
6
## 修改文件,掌握变化
```​
$ git status
​​掌握仓库当前的状态
​$ git diff readme.txt
​​查看修改内容

提交修改

Code
1
2
$ git add readme.txt
​$ git commit -m "add distributed"

版本穿梭

​$ git log
​$ git log –pretty=oneline
​​显示从最近到最远的提交日志

版本回退

​$ git reset –hard HEAD^
​​回退到上一个版本
​$ cat readme.txt
​​查看文本
​$ git reflog
​​查看命令历史,以便确定要回到未来的哪个版本
​$ git reset –hard 3628164
​​指定回到未来的某个版本(版本号没必要写全)

工作区和暂存区

​git add把文件添加进去,实际上就是把文件修改添加到暂存区
​git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支

管理修改

​git commit只负责把暂存区的修改提交了。每次修改,如果不add到暂存区,那就不会加入到commit中

撤销修改

​$ git checkout – readme.txt
​​就是让这个文件回到最近一次git commit或git add时的状态
​场景1:修改工作区,没有add。用命令git checkout – file。

​场景2:修改工作区,已经add。分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

​场景3:修改工作区,已add,已commmit,还没推送远程,使用回退$ git reset –hard HEAD^

删除文件

​场景1:本地删,也想在仓库删。$ git rm test.txt –》 $ git commit
​场景2:本地删,误删想恢复。$ git checkout – test.txt​“一键还原”

远程仓库

GitHub:

这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的

创建SSH Key:
$ ssh-keygen -t rsa -C "hhdwwt@163.com"

GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

添加远程库

要关联一个远程库,使用命令
$ git remote add origin git@server-name:path/repo-name.git
$ git remote add origin git@github.com:Machine4869/learngit.git
关联后,使用命令第一次推送master分支的所有内容;
git push -u origin master
此后,每次本地提交后,只要有必要,就可以使用命令推送最新修改;
git push origin master
*分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候​是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!

从远程仓库克隆

远程库已经准备好了,下一步是用命令git clone克隆一个本地库:
$ git clone git@github.com:Machine4869/gitskills.git
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
分支管理
创建与合并分支
创建dev分支,然后切换到dev分支:
$ git checkout -b dev
相当于:
$ git branch dev
$ git checkout dev

查看当前分支:
$ git branch

合并某分支到当前分支:
$ git merge dev

删除分支:
$ git branch -d dev

解决冲突

用带参数的git log也可以看到分支的合并情况:
$ git log –graph –pretty=oneline –abbrev-commit

*当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log –graph命令可以看到分支合并图。

分支管理策略
不使用Fast forward模式,merge后就像这样:

no-ff参数,表示禁用Fast forward,合并后分支信息会被保留:
$ git merge –no-ff -m “merge with no-ff” dev

团队合作的分支看起来就像这样:

干活都在dev上,master仅用来发布新版本。Dev和master两个分支在远程要和本地同步

BUG分支
*修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

把当前工作现场“储藏”起来:
$ git stash
查看:
$ git stash list
恢复后,stash内容并不删除:
git stash apply
删除
git stash drop
恢复的同时把stash内容也删了:
git stash pop

Feature分支
*开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。$ git branch -d feature-vulcan删不掉

强行删除未合并的分支:
$ git branch -D feature-vulcan
多人协作
推送分支
$ git push origin dev

因此,多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name ​origin/branch-name。

查看远程库信息,使用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 v1.0
查看所有标签:
$ git tag

*默认标签是打在最新提交的commit上的

找到历史提交的commit id:
$ git log –pretty=oneline –abbrev-commit
对指定的commit id打标签:
$ git tag v0.9 6224937
查看标签信息:​
$ git show v0.9

*用PGP签名的标签是不可伪造的,因为可以验证PGP签名。

操作标签
删除标签:
$ git tag -d v0.1​
推送某个标签到远程:
$ git push origin v1.0
一次性推送全部尚未推送到远程的本地标签:
$ git push origin –tags
删除远程标签:
​先从本地删除:
​$ git tag -d v0.9​
​然后,从远程删除:
​$ git push origin :refs/tags/v0.9
使用GITHUB
下载别人的项目:
​你可以访问它的项目主页,点“Fork”就在自己的账号下克隆了一个仓库。
​然后,从自己的账号下clone:
​git clone git@github.com:自己的账号/bootstrap.git
自定义GIT
忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore​


文章作者: Machine
文章链接: https://machine4869.gitee.io/2018/03/07/15204272648525/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哑舍
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论