git大全解

git大全解

git大全解

一、基础概念

首先在本地git init,然后再git clone用于第一次下载完整项目。

注意与服务器之间使用的是ssh连接,所以自己部署服务器的话要把公钥复制到服务器上。

同时要在本地配置用户名和密码来保证能够连接远程服务器,用的是git config user.name以及git config user.email指令,加上-g代表全局,不加的话只在当前项目中有用。

head代表你当前所在的分支的最新一次提交。

origin是远程仓库的默认名称。当然,可以通过git remote add来添加别的远程仓库。在拉取代码的时候,通过git pull <remote> <branch>,以及git fetch <remote>区分所拉取的远程仓库名称。

二、操作

2.1 正向操作

其中remote代表远程仓库,repository代表本地仓库,index代表暂存区,workspace代表工作区。

基本操作就是先git add来将工作加入暂存区,然后通过git commit提交到本地仓库,最后通过git push推送到远程仓库。

从远程仓库可以直接通过git pull来拉取到本地仓库和工作区,也可以分开来操作,git fetch + git merge也可以达到一样的效果。

git fetch :只负责将远程仓库的最新提交下载到你的本地,但不会触碰你的本地工作区和当前分支。这让你有机会先审视远程仓库的更新。

git merge :当你确信远程更新没有问题时,再手动执行 git merge origin/main,将远程更新合并到你的本地分支。

git status:查看提交状态

git log:查看历史,从项目开始到现在所有的历史记录。

2.2 逆向操作

checkout可以将目前工作区所有内容强制丢弃,git checkout -f。

checkout还有切换分支的作用,所以为了便于区分,把checkout分为了merge和switch两个功能。

如果想从暂存区恢复到工作区,可用git restore <file>,会用暂存区的文件内容,覆盖工作区的文件。

从本地仓库恢复到暂存区,可以用git restore --staged <file>

从本地仓库恢复到工作区,可以用git restore --staged <file>+git restore <file>

git reset --soft: 它会移动 HEAD 指针到指定的提交 <commit>,但会保留暂存区和工作区的改动

git reset --mixed:如git reset --mixed HEAD~1,它会移动 HEAD 指针,然后用新 HEAD 的内容覆盖暂存区 ,但保留工作区的改动

git reset --hard:它会移动 HEAD 指针到指定的提交,然后用新 HEAD 的内容彻底覆盖暂存区和工作区。

用reset和restore最大的区别是,reset会回退commit,而restore不会。

2.3 整理操作

git commit --amend 可以服用上一次commit,将此次提交合并到上一次提交。

git rebase -i h1 h2 :可以整理多次提交

左开右闭:会从 h1下一个提交 开始,一直到 h2所有提交,都作为交互式变基的对象。

提交该指令后,会打开一个编辑器,在每个提交前都有一个pick,可用edit替换pick,来指示需要修改对应的提交。

然后会进入类似rebase1/3,修改好了以后,使用 git addgit commit --amend(此次修改附加到上一次修改)和 git rebase --continue 来继续变基过程。

2.4 分支操作

git branch 查看分支

git branch develop 创建分支

git checkout -b develop 创建并切换分支

合并分支有两个方法:

merge------将不同分支的提交历史合并成一个统一的提交历史。

合并分支如果是使用merge,便是:

1.拉取 master 最新数据;

2.先把 master 合井到 develop,在develop分支运行git merge master,如有冲突会进入merging状态。此处merge是为了在develop分支上处理冲突。

3.然后修改并测试代码,如果解决了冲突,则重新git add . 并用git commit -i去除Merging状态。

4.回到master分支,将develop合井到 master,(这里涉及一次快进式合并,Git 只是简单地把 master 分支的指针,直接向前移动到 develop 分支的最新提交。)测试如果 ok 提交到远端

纯粹用git merge的方式多了一次提交,而rebase没有提交。

如果当前develop分支不被别的分支依赖,可以用git rebase来合并分支,只是不太推荐使用,很多大公司都禁用:

1、拉取 master 最新数据;

2、在develop上,git rebase master,变基develop所有提交到master最新提交上,会进入rebase1/n状态。

3、解决冲突,git add .,git rebase --continue,便可复用develop上的最新提交,并结束rebase状态。

此刻,develop的所有提交变基到master最新提交上了。

相当于从

A -- B -- C (master)

​ \

​ D -- E (develop)

变成了

A -- B -- C (master)

​ \

​ D' -- E' (develop)

4、回到master分支,将develop合井到 master,git merge develop。测试如果 ok 提交到远端。

因为git rebase会改变提交id,如果别人依赖我的分支(develop),便会发生异常。

删除分支:git branch -d develop。

删除远程分支:git push origin -d develop。

相关推荐
flow_code11 小时前
切换git账户
git
春生野草15 小时前
Gituee
git·gitee
222you15 小时前
Git推送本地仓库到远程
git
小贾要学习16 小时前
如何在Linux操作系统环境下使用git命令提交文件到远程仓库
linux·运维·git
J2虾虾16 小时前
WebStorm的项目绑定Git并上传到gitee
git·gitee·webstorm
虾说羊17 小时前
git分支管理介绍和stash命令
git
71-319 小时前
git 和 tortoisegit的快速使用教学(上传至gitee或GitHub)
git·gitee
唐青枫1 天前
为什么 .gitignore 不生效?其实你忘了用 git rm --cached!
git
代码or搬砖2 天前
Git学习笔记(三)
笔记·git·学习
虾说羊2 天前
git连接远程仓库并拉去推送以及克隆命令
git