git使用

概念

工作区,暂存区,本地仓库,远程仓库

  • 工作区

你当前正在修改的文件所在的地方(即本地项目文件夹)。这里的文件是"未追踪的"或"已修改但未提交的"。

  • 暂存区

用于临时存放你的修改,等同于"准备提交"的区域。 你需要先把修改"添加"到暂存区,再进行提交。

  • 本地仓库

存储在你电脑 .git 目录中的完整项目历史记录。 只有当你执行 commit 之后,修改才会正式存入本地仓库。

  • 远程仓库

存储在远程服务器上的 Git 仓库(例如 GitHub、GitLab、Gitee)。 只有当你执行 git push,本地提交才会被同步到远程仓库。

冲突

markdown 复制代码
<<<<<<< HEAD
这里是你本地的修改
=======
这里是远程的修改
>>>>>>> remote-branch

解决冲突后,add,commit

查看相关

git status 查看修改状态,有哪些文件被修改或被暂存 ,命令简写gst

git stash list 查看暂存的代码 记录

git log 查看之前的 commit (包含提交id等信息;按q退出查看

git log --all

git branch 查看本地 所有分支 和 当前所在分支

查看远程仓库

git remote show 会返回仓库信息

git remote -v 会返回创建者 及 仓库的 git地址

操作相关

git add <文件名> 把某个修改文件,加入到暂存区

git add . 把所有修改,加入到暂存区(后续才能 提交到本地仓库)

git commit -m '修改说明' 把被暂存的文件,提交到本地仓库

git pull 把当前分支 远程仓库的代码 ,拉取到本地仓库

git push 把当前分支 本地的提交,推送到远程仓库

git checkout xxx 切到某分支

git checkout -b sss 从当前分支,创建 并切到 一个新分支

git branch -m ooo nnn 当前分支重命名, ooo为旧名,nnn为新名

  • 推送到远程

原则,先pull,后push

git push -u origin 分支名 新分支第一次推送

  • 删除

删除某分支(需先切到其他分支

git branch -D xxxxx -D 表示强制删除

git branch -d xxxxx -d 用于删除 已合并过的 分支

删除远程分支

git push origin -d xxxxx // -d 表示删除;git push <仓库名> -d <分支名>

  • 合并分支

可以mergerebase;后者慎用,适用于个人分支

场景:从D 切出 A ,A修改代码并push, D也修改了代码

====== 用 merge

先切到D分支,执行:

git merge A 把 A分支的修改,合并到当前分支

git push (有合并 分叉线

====== 用 rebase

先切到A分支,然后

git rebase D 把D 的修改合过来A,并变基为 A

再切到 D分支,然后

git merge A 把A 合并到D

git push 此时完成合并(一条直线,没有分叉;A分支可以删了

撤销相关

  • 情况1 已commit 未push

git reset --soft xxxx xx为commit ID,表示需要回滚到 哪次commit

git reset --mixed xxx 同上,并且撤销 add

  • 情况2 已commit 且push

git reset --hard xxxx xx为commit ID,表示需要回滚到 哪次commit,且其后面的commit 和记录 都会消失清除,包括工作区代码;慎用!!

git revert xxxx xx为commit ID,表示撤销哪次提交; 该次提交记录还在。

特殊

  • commit修正

对上一次commit进行修正(可能是因为有代码遗漏需补充;或需修改说明描述;或少提交了某个文件)

git commit --amend -m '说明描述'

这样,提交了修改,不会产生新的commit记录, 但仍算作上一次commit

rebase

git rebase -i HEAD~2 合并提交; 2表示合并 此前的2次提交。可自定义

如果变基过程中出错,需要中断,用 git rebase --abort

避免长时间不同步:如果 feature 分支开发时间过长,应该定期 rebase ,保持代码最新

bash 复制代码
git checkout feature/login
git rebase main   将 feature/login 变基到 最新的 main

场景

场景1: 在 A分支 修改到一半,有新任务 需切去其他分支做。(无法切,因为需commit,但是还不足以commit)

git stash 先暂存代码(注意,并不是提交);会把代码 先存入一个栈

然后切去其他分支 开发.....完了之后,切回A分支 (这时还没有 暂存的代码)

执行: git stash pop 恢复最近一次暂存的代码;并删除 栈记录

也可以 git stash apply (不会删除 栈记录)

如果需要恢复特定的,用

git stash apply stash@{1}

场景2:从dev切出 A,B分支,A 分支修改了些代码;有时,若 B 需要 A所修改的代码

把A分支的修改 先push到远程

切到B分支

git cherry-pick xxxxxxxx // xx 为A的 commit ID;

这样就把A的修改 合到B分支了

场景3:建立项目仓库

cd 到本地某个目录,执行

git init 本地仓库初始化

git clone <仓库地址> 从远程仓库克隆项目到本地

git pull origin <分支名> 拉取最新代码

场景4: 远程代码比本地新,导致 push 失败

git pull -r 即 git pull --rebase origin main

若有冲突,则解决冲突。解决完,执行

git rebase --continue

git push

场景5:误提交到错误的分支。如,本来应该提交到 dev 分支,结果提交到了 main

  • 若未push

先将提交转移到正确的分支:

xml 复制代码
git checkout dev
git cherry-pick <提交ID>

然后,回滚 main

css 复制代码
git checkout main
git reset --hard HEAD~1
  • 若已push

先在 main 上撤销提交:

css 复制代码
git revert <提交ID>
git push origin main

在 dev 上重新提交:

perl 复制代码
git checkout dev
git cherry-pick <提交ID>
git push origin dev

场景5:执行了 git checkout . 或 git reset --hard,导致未提交的修改丢失

git reflog 列出所有最近的 Git 操作记录,找到正确的 HEAD 位置

然后 回滚到某个提交:

git reset --hard <提交ID>

如果 reset 也无法找回

使用 git fsck --lost-found 查看丢失的对象。 但如果是 checkout .,可能无法恢复。

相关推荐
马达加斯加D1 小时前
git --- cherry pick
git
laugh123212 小时前
GitLab 服务器宕机时的项目代码恢复方法
服务器·git·gitlab·数据恢复
森叶5 小时前
Git Bash 设置Notepad++作为默认编辑器
git·编辑器·notepad++
2401_840192275 小时前
git的作用,以及和github的区别
开发语言·经验分享·git·python·devops
时77 小时前
git常用知识
git
就叫飞六吧8 小时前
git克隆项目报错:error: unable to create file vue...... Filename too long
前端·vue.js·git
琳沫lerlee10 小时前
【Git 暂存操作指南2】
git·暂存
被放养的研究生21 小时前
Git和GitCode使用(从Git安装到上传项目一条龙)
git·elasticsearch·gitcode
Beyond欣1 天前
RepoReporter 仿照`TortoiseSVN`项目监视器,能够同时支持SVN和Git仓库
git·svn
ianozo1 天前
[GXYCTF2019]禁止套娃1 [GitHack] [无参数RCE]
git