git使用笔记

Git与SVN的区别

列举两个比较明显的区别:

  • Git是分布式的, SVN不是。Git不需要一个点来存储和管理代码, 是去中心化的。
  • Git没有一个全局的版本号, 而SVN有。目前为止这是跟SVN相比Git缺少的最大的一个特征。

img

Git工作区, 暂存区和版本库

Git工作区, 暂存区和版本库是Git使用到的一个重要概念。

  • 工作区: 在本地目录看到的内容。
  • 暂存区: 也叫stage/index。一般存放在.git目录下的index文件中。可以理解为一个缓冲区域, 临时保存你的改动。
  • 版本库(HEAD): 工作区有一个隐藏目录.git, 是git的版本库。指向你最近一次提交后的结果。

命令

设置提交代码时的用户信息

开始使用git前需要先设置提交的用户信息, 包括用户名和邮箱:

git config --global user.name 'runoob'
git config --global user.email test@runoob.com
创建新仓库

创建新文件夹, 在文件夹下执行 git init,以创建新的git仓库。

注: 执行完命令后会在当前目录生成一个.git目录。

检出仓库

创建一个本地仓库的克隆版本:

git clone /path/to/repositry

如果是远端服务器上的仓库, 命令如下:

git clone username@host:/path/to/repository
#或者
#例子
git clone https://gitee.com/xia-chu/ZLMediaKit/tree/master/src
添加与提交

计划改动, 使用如下命令:

git add <filename>
git add <pathname>
git add *

这是git基本工作流程的第一步(改动只是提交到缓存区域)。使用如下命令以实际提交改动:

#提交暂存区的文件到本地仓库
git commit -m "代码提交信息"
#提交暂存区的指定文件到仓库区
git commit [file1] [file2] ... -m [message]

改动已经提交到了HEAD, 但没有提交到远端仓库。

查看暂存区的状态:

git status

查看版本:

#输出提交信息
git log 
#或者 输出更加详细的提交信息
git show 
推送改动

改动现在已经在本地仓库的HEAD中。执行命令以将这些改动提交到远端仓库:

git push origin master
#master是默认的分支, 也可以提交到其他分支上

如果没有克隆现有仓库, 并欲将你的仓库连接到某个远程服务器, 使用如下命令:

git remote add origin server #创建远程仓库
#origin为远程仓库的名称, 可自行定义
#server为远程仓库地址
#例子
git remote add zlm https://gitee.com/xia-chu/ZLMediaKit/tree/master/src
分支

分支是用来将特性开发绝缘开来的。在你创建仓库的时候, master是"默认"。在其他分支上进行开发, 完成后再将他们合并到主分支上。

创建一个叫做"featue_x"的分支, 并切换过去:

git checkout -b feature_x

切换回主分支:

git checkout master

除非你将分支推送到远端仓库, 不然该分支就是对于他人不可见的:

git push origin <branch>
#origin为远程仓库名称
#branch为分支名称
#例子
git push https://gitee.com/xia-chu/ZLMediaKit/tree/master/src master
更新与合并

更新本地仓库至最新改动, 执行:

git pull 仓库名 <远程分支名>:<本地分支名>
#例子
git pull zlm master

#等同于在工作目录中获取(fetch)并合并(merge)远端的改动
git fetch 仓库名 <远程分支名>:<本地分支名>
git merge FETCH_HEAD 

#通过FETCH_HEAD查看刚取回的更新信息
git log -p FETCH_HEAD

合并其他分支到你的当前分支

git merge branch

并非每次自动合并都能成功, 有可能导致冲突(conflicts)。这时候就需要修改这些问价来人肉合并这些从图(conflicts)。

#冲突修改完毕之后, 需要执行如下命令将他们标记为合并成功
git add <filename>
#在合并改动之前, 也可以使用如下命令查看
git diff <source_branch> <source_branch> 
替换本地改动

如果本地文件修改错误想要回退, 可以使用如下命令替换掉本地改动:

git checkout -- <filename>

注: 此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到缓存区的改动,以及新文件,都不受影响。

如果想要丢弃本地改动与提交, 获取服务器上最新版本并将你本地主分支指向它

git reset --hard origin/master

补充

reset的用法

三种用法:

#重置HEAD和branch的同时, 重置暂存区和工作目录的内容
git reset --hard [HEAD]|[commitid]|[branch]
#重置HEAD和branch的同时, 并把重置HEAD所带来的新的差异放进暂存区
git reset --soft [HEAD]|[commitid]|[branch]
#重置HEAD和branch的同时, 工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录
git reset --mixed [HEAD]|[commitid]|[branch]

参考: https://www.jianshu.com/p/c2ec5f06cf1a

清空缓存区域

删除暂存区指定文件

#将暂存区中内容删除, 工作区中对应的文件并不会收到影响
git rm --cached <文件名1> <文件名2> ...
#将暂存区中的内容删除,并且工作区中对应的文件也会被删除
git rm -f <文件名1> <文件名2> ...

清空暂存区

rm .git/index
fetch & pull 解析

分支操作

git branch #查看本地所有分支 
git branch -r #查看远程所有分支
git branch -a #查看本地和远程的所有分支
git branch <branchname> #新建分支
git branch -d <branchname> #删除本地分支
git branch -d -r <branchname> #删除远程分支,删除后还需推送到服务器
git push origin:<branchname> #删除后推送至服务器
git branch -m <oldbranch> <newbranch> #重命名本地分支

#重命名远程分支:
#1、删除远程待修改分支
#2、push本地新分支到远程服务器

#git中一些选项解释:
-d
--delete:删除

-D
--delete --force的快捷键

-f
--force:强制

-m
--move:移动或重命名

-M
--move --force的快捷键

-r
--remote:远程

-a
--all:所有

例:

git branch -d feature_x

#删除本地分支
git branch -d feature_x
#如果删除不了可以强制删除
git branch -D feature_x
#有必要的情况下, 删除远程分支
git push origin --delete feature_x

参考: https://www.cnblogs.com/runnerjack/p/9342362.html

stash用法

何时使用stash?

切分支就再也不会报错有改动未提交。如果要应用这些stash,直接使用git stash apply或者git stash pop就可以再次导出来。

用法参考:

https://www.cnblogs.com/zndxall/archive/2018/09/04/9586088.html

checkout用法

参考:

https://blog.csdn.net/hutaoer06051/article/details/8870612

https://www.jianshu.com/p/37f3a7e4a193

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值