git入门

一、集中式与分布式

集中式:版本库存放在中央服务器,干活需要从其中取出,干完再放回去;必须联网才能工作

分布式:没有了中央服务器之说,远端只是负责交换修改等,每个电脑上都是完整的版本库。不需联网,只需要做好了,有网再推送远端就可以与其他人交换;分支管理功能强大。

 

二、安装

0.windows 安装完成后 ,从Git Bash 进入shell界面

1. $ git config --global user.name "Your Name"

$ git config --global user.email "email@example.com"
分布式版本控制系统需要每个机器自报家门:名字和email地址

三、创建本地版本库

$ cd f:   进入系统f盘目录  (cd 会进入系统根目录)

$ mkdir learngit  创建learngit 目录(文件夹)

$ cd learngit 

$ pwd     显示当前目录

 

$ git init     初始化(创建)一个版本库(跟踪控制整个当前目录文件夹 learngit),默认是master分支

注意git下修改相关txt文件 用notepad++的UTF-8 without Bom模式,windows自带记事本会更改格式。

 

四、编写文件readme 并推送到本地版本库默认master分支

$ git status   查看当前版本库与工作目录(working directory——电脑里能看到的文件内容)之间的变化

$ git add readme         将readme添加到stage暂存区,这里add 后面可以跟几个文件

$ git commit  -m "create readme"  将readme 推送到本地仓库的master分支(默认分支),这里git commit 一次性推送所有stage暂存区内容到master分支,此时stage(working tree clean)里是空

 

五、版本回滚

$ git log    分布式版本控制 追踪的是版本库中快照commit的改变,git log 查看所有的改变(每个commit 都有一个版本ID, 对应一个改变)    单行显示 加 --pretty=oneline 后缀

按时间线,每个版本都会产生一个节点,HEAD指向最终的版本节点

$ git reset --hard HEAD^      回退到HEAD前的一个节点,HEAD~num 回退到HEAD的往前的第num节点。HEAD就是一个指向当前branch的指针引用,  branch其实也是一个指向节点的指针。

$ git reset --hard  commit_ID的前几位

 

$ git reflog   显示记录的每一次commit以及ID   (git tag 打标签也是针对每个commit ID进行的)

$ cat readme 可以查看文件中内容

 

$ git diff HEAD -- file_name     查看工作区的file_name文件与版本库中最新版本的区别。git 里面当前分支的内容控制着工作区的显示情况

 

六、撤销工作区的修改:git checkout -- readme    让文件回到最近一次commitadd时的状态

case1: 工作区修改还没有放到stage暂存区

$ git checkout -- readme     撤销后工作区和版本库一致(其实就是用版本库的版本替换工作区的版本

 

case 2: 文件readme已经放到stage暂存区,又作了修改(暂存区有想要的备份)

$ git checkout -- readme                 撤销后就回到添加到stage暂存区之前的状态

 

case 3: 工作区已经修改,然后还放到了stage暂存区(暂存区都没有想要的修改前的备份了),但还没有commit

$ git status                                  查看一下,git会有很多提示命令

$ git reset HEAD readme          撤销暂存区的提交 unstage,暂存区变空

$ git checkout -- readme            此时 又可以用case1解决了

 

七、删除文件

$ rm readme               删除工作区的readme文件

$ git status   提示工作区和版本库不同

 

case1:确定要删除,因此也删除版本库中的readme文件

$ git rm readme  

 

case2:误操作 恢复工作区的readme文件

$ git checkout -- readme     

 

八、添加远程仓库。用已创建的本地仓库关联这个远程仓库(远端库名字默认 origin

 

0.登录github,  create a new repo(每个repo就是一个版本库,比如 learngit)

1.创建一个ssh秘钥关联本机和此git账户,一定要记得创建秘钥时加本人的注册git账户的邮箱。然后git认证此ssh

2.关联本地仓库到远端仓库, 在本地仓库的分支master下 运行 $ git remote add origin git@github.com:zhaohengzhen/learngit.git    默认用SSH,很快。http模式传输速度慢

3.$ git push -u origin master       将本地版本库当前分支推送到远端的master分支。第一次推送到远端的空库时,加上-u参数不仅作了推送,还会将本地的master分支与远端的master分支关联起来。

4.$ git push origin master           之后推送到本地库master的内容都可以通过此命令推送至远端库的master

 

九、从远程库克隆——从零开发最好的方式:先fork别人版本库,然后克隆到本地

$ git  clone git@github.com:zhaohengzhen/origin_new_repo.git     

 

十、创建和合并分支

master指向的最后提交的节点,HEAD指向当前分支

$ git branch dev     创建新分支dev

$ git  branch             查看所有分支  , *前缀的是当前分支

$ git switch dev   移动到dev上(将HEAD从master移动到dev上)。此后所做修改从dev这个分支向前延伸,但是master停在远处了。

 

在dev分支进行一系列开发,最后合并到master分支上。

$ git switch master     先跳到最终保留的分支

$ git merge dev          将dev分支merge到当前master上

$ git branch -d dev      删除dev分支(其实删除的是dev指针)

 

如果dev分支开发完,不merge直接丢弃删除

$ git branch -D dev 

还可以创建加跳转分支一步到位

$ git switch -c dev

 

十一、分支策略

git鼓励大量使用分支

master分支应该非常稳定,一般对应发布的新版本,不能在上面干活

多人协作时远端创建一条dev分支

每人再创建各自的远端分支,将各自提交经常合并到dev分支,dev分支作为开发测试分支,没问题了再merge到master分支

$ git merge --no-ff -m "merge with no-ff" dev    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

 

十二、bug分支

 $ git switch master 本来在dev开发呢,需要修复master上的bug

 
$ git stash
把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash pop  恢复现场

此时master已经修复了bug,我们想master上修复的bug 提交复制到dev上
$ git switch  dev$ git cherry-pick commit_id_bug

feature分支
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

十三、创建标签
$ git tag v1.0   默认打在最近一次的commit_id上
$ git tag v0.9 f52c633    也可以指定commti_id打标签
$ git show v0.9  查看此标签的所有信息
$ git tag -a v0.1 -m "version 0.1 released" 1094adb    创建带有说明的标签,用-a指定标签名,-m指定说明文字

$ git tag -d v0.1  删除标签
$ git push origin v1.0  推送某个标签到远程
删除远程标签:先删除本地标签,再删除远程
0.
$ git tag -d v0.9 删除本地标签
1.$ git push origin :refs/tags/v0.9               删除远程标签


十四、使用github
  • 自己只拥有Fork后的仓库的读写权限;

  • 可以克隆自己fork后的仓库到本地,修改后推送到自己的fork远端库,然后再pull request给开源的官方仓库来贡献代码。

 

十五、忽略特殊文件

0.用notepad++ 编写.gitignore文件

1.忽略原则:操作系统自动生成的缩略图,python编译产生.pyc文件.pyo文件 .so文件 dist目录等

# Windows:

Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

2.先单独commit 提交 .gitignore文件到git(.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!)

 

 

git问题:提示access权限

原因:由于电脑账号更改了密码,此密码绑定了gitlab密码。

处理办法:直接在控制面板的用户凭据处修改git密码,修改后如果不可以,直接将凭据删除。然后重新输入用户名及邮箱,配置ssh。

 

注意:一般来讲

如果是别人的仓库,用http服务

自己的仓库,用ssh.



 
 


 
 

 

posted @ 2020-04-26 01:53  Parallax  阅读(156)  评论(0编辑  收藏  举报