git用法总结


git的基本操作可以用下面的图来表示
在这里插入图片描述


git stash

当前工作区有修改,但是需要切换到其它分支做事情,可以用git栈先存起来,否则checkout时会丢失非暂存区内的内容,等切换回来后再拿出来,git栈是全局的

git stash
git stash save "your message"		//添加说明
git stash list
git stash pop		//将最新存储的修改应用到当前工作目录,并从栈中删除
git stash pop stash@{n}		//将指定的存储修改应用到当前工作目录,并从栈中删除
git stash apply stash@{n}		//将指定的存储修改应用到当前工作目录

git add

添加文件到暂存区

git add . //添加当前目录下所有被修改的文件到暂存区
git add <file1> <file2> ...   //添加指定文件到暂存区
git add <directory>          //添加指定目录及其所有文件到暂存区

git commit

把暂存区的内容提交到本地仓库,然后清空暂存区用于下一次的提交

git commit -m "本次提交的相关信息"

git branch

git branch		//显示所有本地分支
git branch branch-name		//创建一个新分支
git branch -d branch-name		//删除本地分支, -D为强制删除
git branch -m new-branch-name		//重命名本地分支
git branch -m <old-branch-name> <new-branch-name>
git branch -r		//查看远程所有分支

git checkout

git checkout branch-name		//切换到现有分支,如果对应分支不存在会帮我们把远端的分支拉下来
git checkout -b branch-name		//创建并切换到新分支
git checkout .		//当你在工作目录中做了一些更改,但决定丢弃这些更改并恢复到上一次提交时的状态
git checkout --filename		//撤销本地工作目录所作的更改

获取远程分支

git branch --set-upstream-to=origin/<remote_branch_name> <local_branch_name>		//将本地已有的一个分支跟踪到远程
//切换到已经存在的分支并拉取
git checkout <existing_local_branch>
git pull origin <remote_branch_name>

暂存区的一些操作

  • git status:查看当前工作区和暂存区的状态,包括已修改但未添加到暂存区的文件,已暂存但未提交的文件,以及没有任何更改的文件
  • git diff --cached:查看已经添加到暂存区但尚未提交的文件的具体变更内容
  • git reset HEAD file:从暂存区移除文件,但仍保留工作目录中的文件
  • git reset:完全清空暂存区,同样不影响工作目录

移动提交记录

1.HEAD
HEAD 是一个对当前所在分支的符号引用 —— 也就是指向正在其基础上进行工作的提交记录,用git checkout哈希值可以分离HEAD去指向某一提交记录
2.git log(reflog)
查看分支上所有提交记录的的哈希值
3.相对引用

^:向上移动一个提交记录,git checkout main^
~num:向上移动num个提交记录,git checkout HEAD ~2

4.强制修改分支位置
用-f结合相对引用可以让分支指向某个提交也就是某个点

git branch -f main HEAD ~3		//强制将分支指向HEAD的第三级parent提交

git merge/rebase

功能上来看都是进行分支的合并,merge会保留原来的分支结构并产生一个新的提交记录,rebase是进行变基,把一个分支的提交在处理冲突后移到另一个基点上,但是注意rebase之前先把本地所做修改提交了,否则会丢失参考

当前分支为main
git merge develop		//把develop分支合并到当前分支
git rebase develop		//把当前分支变基到develop分支,变基后还是在main分支上,但现在的main分支是基于develop分支上的,相当于main分支做了更新
git rebase --abort		//在执行 rebase 过程中,如果遇到冲突无法解决或不希望解决,可以使用该命令回到rebase开始之前的命令

处理rebase冲突:
先rebase,冲突解决之后,git add .放到暂存区,然后git rebase --continue,处理完以后可以git push -f

git submodule

项目中有子模块的时候记得每次pull的时候也要更新,在子模块的上一级目录中去做这个事情

git submodule update --init --recursive		//初始化、更新,同时递归处理子模块中的子模块

git restore

用于还原工作目录中的文件,比如不小心删除了一些文件,git status的时候发现提示有一些更改,这个时候可以用restore来撤销

git restore .		//一次性恢复所有被删除的文件
git restore file		//恢复一个文件,同样也可以撤销文件的更改
git restore --staged file		//撤销已暂存但未提交的文件
git restore --staged .		//撤销工作目录中的所有更改

git clean

有时候会遇到本地工作目录中出现未跟踪的文件,用restore是无法撤销的,就要用clean来删除

git clean -f file		//删除未跟踪的文件
git clean -fd		//删除未跟踪的文件和目录

git reset

1.软重置(参考
只重置 HEAD 指针到指定提交,保留暂存区和工作目录的更改,就是把工作目录的更改放到了暂存区

git reset --soft <commit>
git reset --soft HEAD~1

2.混合重置
重置 HEAD 和暂存区到指定提交,保留工作目录的更改,放到工作区

git reset --mixed <commit>

3.硬重置

git reset --hard		//丢弃所有未提交的更改并恢复到最新提交的状态
git reset --hard <commit>		//重置到某个特定提交,并丢弃从该点之后的所有更改

git revert

这个命令用来撤销某个提交,而不会直接修改提交历史。相反,它创建一个新的提交,将指定的提交的更改反向应用

特点:

  • 更改反向应用:假设有一个提交 A,它包含了一些更改,比如添加了一行代码或删除了一个文件。反向应用提交 A 的更改意味着 Git 会创建一个新的提交 B,它会执行与提交 A 完全相反的操作(如果提交 A 添加了一行代码,提交 B 就会删除这行代码)

  • 不修改历史:git revert 创建了一个新的提交来反转指定提交的更改,这样做不会破坏提交历史(git reset会破坏)

操作:

  • 常规的commit:直接revert id即可
  • merge commit:需要添加 -m 选项以代表这次 revert 的是一个 merge commit,因为对于merge的节点来说有两个父commit点,需要告诉git哪一条分支被revert,哪一条分支被保留,这个由-m所接收的参数来决定,数字取值为 1 和 2,也就是 Merge 行里面列出来的第一个还是第二个被保留参考
git show bd86846
commit bd868465569400a6b9408050643e5949e8f2b8f5
Merge: ba25a9d 1c7036f(1为主分支,2为合并进来的分支)

git push

本地仓库到远程仓库推送

git push		//将当前分支的所有提交推送到远程仓库,通常是默认推送到与本地分支同名的远程分支
git push origin feature-branch		//指定具体的本地分支和远程分支来进行推送,这里将本地的 feature-branch 分支推送到远程仓库 origin 的 feature-branch 分支
git push -u origin <local-branch>:<remote-branch>	//将本地分支和远程分支建立跟踪关系,后续pull和push不再需要指定远程和分支
git push origin HEAD		//将当前分支的所有提交推送到远程仓库origin的对应分支,如果远程不存在会自动创建
git push -f		//强制推送
git push --set-upstream origin <branch_name>		//设置上游分支并推送
git push origin --delete branchname		//删除远程分支

git pull

拉取并合并远程仓库的当前分支的更改到本地当前分支,等同于fetch+merge,pull之前先commit,不然会丢失

git fetch		//只从远程仓库拉取更新,但不合并到本地分支
git merge		//合并到本地分支
git pull <remote> <branch>		//从指定的远程仓库和分支拉取并合并更改,也就是更新当前的分支
git checkout -b 本地分支名 origin/远程分支名         //拉取某一分支
git config pull.rebase true		//git pull的时候远端分支数多余本地,这种方式可以确保提交被重新应用在最新的远程更改之上,保持提交历史的整洁
git pull -r		//从远程仓库获取最新的更改,并将本地的提交应用在最新的远程更改之上(推荐使用)

gitk

用于打开图形化界面查看分支

gitk --all & //打开图形化界面
--all: 这个选项告诉 gitk 显示所有分支,包括本地和远程分支
&: 命令末尾的 & 表示将命令放在后台运行。这使你可以在 gitk 运行时继续使用终端执行其他任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值