git常用的操作

svn与git的区别:

1. svn是集中式管理,所有的内容都是在服务器端,如果服务器受到攻击,那么很难实现版本回退,
文件式管理的是针对与每个文件管理
2. git分布式管理,在每个本地环境里都会有一套自己的版本库,即便服务器没有了,还是能快捷回退,
项目式管理,是针对与整个项目管理

git是很多公司使用的版本控制工具,今天就来说一下git使用的大体流程:

git的工作流:
在这里插入图片描述

工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。

暂存区:已经 git add xxx 进去,且未 git commit xxx 的。

本地分支:已经git commit -m xxx 提交到本地分支的。

1 下载git

在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。

Git 各平台安装包下载地址为:http://git-scm.com/downloads

2 配置git

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。

2.1 用户信息配置

配置个人的用户名称和电子邮件地址:

第一次提交的时候需要指定一下你当前提交的用户和邮箱
git config --global user.email "1234567891@qq.com"  改成你的邮箱
git config --global user.name "alexli"               改成你的github用户名

3 本地电脑和github服务器账号相关联

  1. 使用https 是需要输入用户名和密码的方式 每次都要输入 输错就把提交命令再执行一次 会重新让你输入
  2. 使用SSH 可以让本地电脑和github账号相关联 关联了之后就是永久
    1. 理解原理: 使用一个本地秘钥(电脑的身份证) 把你的本地秘钥和服务器github账号相互绑定 把身份证绑定到服务器账号上
      你每次提交都会读取你当前的本地的秘钥
      再和你本地仓库管理的github服务器仓库的账号里面的秘钥对应
      如果是一样的就认为github是认可这台电脑的就允许提交
    2. 在本地电脑生成一个秘钥:
      在gitbash黑窗里面执行 ssh-keygen -t rsa -C “1234567891@qq.com”
      输入后一路回车 出现2048就表示成功
  3. 秘钥生成后会在C盘 》 用户 》 你的用户(英文或者administor) 》 .ssh 》 id_rsa.pub
    id_rsa.pub 本地公钥(公开的钥匙)
    把这个id_rsa.pub 使用记事本打开 把乱码复制一下
  4. 打开github账号
    点击设置
    点击SSH设置
    点击右上角new SSHKey
    输入title(你的名字) key (复制公钥里面的乱码)
    点击Add即可
    出现一个黑色的钥匙就表示成功

4 git和github交互

  1. 去github上去创建一个服务器的仓库
    1. 打开github官网 登录
    2. 点击右上角头像左边的+号
    3. 点击New repository 新建一个本地仓库
    4. 输入Repository name仓库名 不能有中文空格等特殊符号 尽量用纯英文
    5. 输入一个仓库的描述
    6. 选择public
    7. 是否要初始化一个README阅读我 不要勾
    8. 点击创建
  2. 让本地仓库和远程仓库连接起来 (做一次即可)
    git remote add origin git@github.com:zxs/jd23.git 让本地仓库和远程仓库连接
    git@github.com:zxs/jd23.git 远程仓库地址 github给你提供的
  3. 把本地仓库的代码提交到远程的仓库里面
    git push -u origin master 把本地代码提交到远程的master(主)分支里面

5 单人提交完整的流程:

1. git init 初始一个本地仓库
    执行后会在当前项目的根目录创建一个.git文件夹 文件夹就是本地仓库 
    这个文件夹是隐藏文件夹需要显示隐藏文件夹
    
2. git add index.html  添加一个文件到本地暂存区
   git add .   添加所有的文件到暂存区 
   
3. git commit -m '提交日志'  把暂存区的文件提交到本地仓库   提交日志就是说明你改了了什么
4. 第一次提交的时候需要指定一下你当前提交的用户和邮箱
5. git config --global user.email "228197155@qq.com"  改成你的邮箱
6. git config --global user.name "zwxs"               改成你的github用户名
7. 指定完成后再次执行git commit -m '提交日志就可以提交了'
8. git log 查看代码提交的记录  
      查看当前历史提交的记录 版本号 作者 时间  提交说明
      
9. 如果新增了代码需要再次提交  重复 2步  和 第3步
10.如果在新建一个项目重新管理 执行 1 2 3 步骤 既可以
11. 去github服务器创建一个远程仓库  选择SSH方式提交(前文的第三和第四步)

12. 提交到服务器上的远程仓库地址:
	git remote add origin  git@github.com:zwxs/jd23.git  让本地仓库和远程仓库连接
	git push -u origin master  把本地代码提交到远程的master()分支里面

6 多人协作的流程

1.先clone远程仓库里面的代码:
	git clone -b master git@github.com:Alex-Li2018/testGit.git
	git clone -b 分支名 路径
	如果是clone主分支的代码直接: git clone 
2.创建dev分支(它区别与主分支): git checkout -b dev 
	git branch dev 创建dev分支
 	git checkout dev 切换到dev分支
3.提交自己写的代码到dev分支之前,先pull代码,避免冲突
	1. 指定本地dev分支与远程origin/dev分支的链接
		git branch --set-upstream-to=origin/<branch> dev
		git branch --set-upstream-to=origin/dev dev	
	2. 接着pull代码 git pull
4.提交代码:
	git add . 添加所有的文件到暂存区 
	git commit -m "提交描述"  把暂存区的文件提交到本地仓库
	git push origin <branch-name> 推送代码到远程服务器端
5.下次先切换到自己的分支 git checkout dev
6. git pull先去拉取最新的代码
7. 然后重复第四步就可以了
8. 你可能需要将自己分支上的代码合并到主分支上
 	1.在dev分支上 git add / git commit
 	2.git checkout master 切换到主干分支
 	3.git pull 将主干代码更新到最新,必须更新,否则会覆盖
 	4.git merge dev 合并dev到主干
 	5.git push origin  master:master 本地主干分支推送到远端主干分支

总结一些上面的操作:

  1. 查看远程库信息,使用git remote -v;

  2. 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  3. 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

  4. 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  5. 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

  6. 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

7 其他的一些git指令

git fetch与git pull的区别:

git fetch 相当于是从远程获取最新到本地,不会自动merge 

git pull:相当于是从远程获取最新版本并merge到本地 
git log --graph --pretty=oneline --abbrev-commit 查看分支及主干流程图
git reset --hard HEAD^  回退到上一个版本

在Git中,用HEAD表示当前版本,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

git help git帮助指令

这个指令的作用是很大的,建议新手多git help

8 git rebase(衍合过程)

9 git小乌龟

当然了这些繁琐的命令会让你不知所措,那么来试试git小乌龟吧

请参考这篇文章

如何设置Git提交注释模板

常用的vscode git插件: git Blame(非常好用)

10. 回滚

提交代码的时候会遇到版本回滚的问题,那么怎么版本回退呢?代码尚未提交怎么回滚呢?代码提交了则呢回滚呢?

10.1 在工作区的代码

git checkout -- a.txt   # 丢弃某个文件,或者
git checkout -- .       # 丢弃全部

注意:git checkout – . 丢弃全部,也包括:新增的文件会被删除、删除的文件会恢复回来、修改的文件会回去。这几个前提都说的是,回到暂存区之前的样子。对之前保存在暂存区里的代码不会有任何影响。对commit提交到本地分支的代码就更没影响了。当然,如果你之前压根都没有暂存commit,那就是回到你上次pull下来的样子了。

10.2 代码git add到缓存区,并未commit提交

git reset HEAD .   # 回滚所有
git reset HEAD a.txt # 回滚某个文件

这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化

10.3 git commit到本地分支、但没有git push到远程

git log            # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>  # 回到其中你想要的某个版
或者
git reset --hard HEAD^  # 回到最新的一次提交
或者
git reset HEAD^  # 此时代码保留,回到 git add 之前

10.4 git push把修改提交到远程仓库

10.4.1 通过git reset是直接删除指定的commit

git log       # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>
git push origin HEAD --force   # 强制提交一次,之前错误的提交就从远程仓库删除

10.4.2 通过git revert是用一次新的commit来回滚之前的commit

git log        # 得到你需要回退一次提交的commit id
git revert <commit_id>  # 撤销指定的版本,撤销也会作为一次提交进行保存

10.4.3 git revert 和 git reset的区别

- git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留;
- git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除

11 git cherry-pick
拣选会提取某次提交的补丁,之后尝试将其重新应用到当前分支上。 这种方式在你只想引入特性分支中的某个提交时很有用。

假设你的项目提交历史如下:
在这里插入图片描述
如果你希望将提交 e43a6 拉取到 master 分支,你可以运行:

# 当前处于 master 分支

$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index
fails."
 3 files changed, 17 insertions(+), 3 deletions(-)

这样会拉取和 e43a6 相同的更改,但是因为应用的日期不同,你会得到一个新的提交 SHA-1 值

12 git忽略文件不生效的处理

git rm -r --cached .
 
git add .

git commit -m 'update .gitignore'

13 git锁定本地文件不提交

对不想提交的版本库里面的文件直接这样做就可以!这样做了 就不会提交已经是版本库文件的文件了


​​​​​​​git update-index --assume-unchanged .gitignore
git update-index --assume-unchanged php/application/modules/Default/views/index.html
 
git update-index --assume-unchanged -- path/to/file     # 启用忽略
git update-index --no-assume-unchanged -- path/to/file  # 停用忽略

14 git学习的资料

菜鸟教程: http://www.runoob.com/git/git-tutorial.html
廖雪峰官方博客: https://www.liaoxuefeng.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值