Date: August 6, 2023
常用总结:
# 暂存所有文件
git add .
# 提交版本记录
git commit -m
# 将仓库文件提交到远程仓库
git push
# 查看版本号
git reflog
# 回退版本
git reset <commit> # 这里我一般用--hard,具体看git常用指令表
# 拉取得远程仓库代码
git pull # 相当于 fetch 与 merge
详细流程:
1-首次拉取服务器代码
注意:提交代码之前,需先从服务器上面拉取代码,以防覆盖别人代码!
git pull
2-查看当前工作目录树的工作修改状态(这个命令在git中使用最频繁了,原因会告诉你下一步该做的事情):
git status
3-将工作区修改添加的文件提交到暂存区:
git add + 文件
git add -u + 路径:将修改过的被跟踪代码提交缓存
git add -A + 路径: 将修改过的未被跟踪的代码提交至缓存
4-将暂存区代码提交到本地仓库中:
git commit -m “功能修改,这里是注释”
5-将代码推送到服务器(主分支):
git push origin master
命令集合:
Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高
效地处理从很小到非常大的项目版本管理。
Working Directory(工作目录):
即正在编辑的文件状态。文件状态为未跟踪(untrack)和已修改(modified)在此区域内
Staging Area(暂存区):
保存了下次将提交的文件列表信息。文件状态为已暂存(staged)在此区域内
Repository(本地仓库):提交到本地仓库的文件
Repository(远程仓库):已提交到远程计算机内的文件
提交流程为:工作区》暂存区》本地版本库》远程版本库
特点:项目越大越复杂,协同开发者越多,越能体现出 Git 的高性能和高可用性!
未跟踪(untrack):未追踪,表示文件为新增加的
已修改(modified):表示修改了文件,但还没将修改的结果放到暂存区
已暂存(staged):表示修改的文件提交到了暂存区,但是还没有提交到本地Git版本库
已提交(committed):表示数据安全提交到了本地Git版本库
注意:
工作区的文件被修改了,但还没有放到暂存区,就是已修改状态。
如果文件已修改并放入暂存区,就属于已暂存状态。
如果 Git 仓库中保存着特定版本的文件,就属于已提交状态。
Git工作区中的状态:
在Git Bash Here的控制台里输入:
git config --global user.name "你的名称"
git config --global user.email "你的邮箱"
切换完成后,查看对应的账号:
git config user.name
输出账号名称:YSGStudyHards
案例:
nathanchen@NathansMacBook-Pro ~ % git config --global user.name
nathan.chen
//查看用户名
git config user.name
//查看邮箱地址
git config user.email
初始化步骤:
如果本地没仓库,选这个 create a new repository on the command line
echo "# test2" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/CaptainDDDrake/test2.git
git push -u origin main
上传代码:
git add .
git commit -m 'ChangeTitle'
git push origin main # origin main 指将本地main分支push到远程仓库中
初始化步骤:
如果本地有仓库,选这个
push an existing repository from the command line
git remote add origin https://github.com/CaptainDDDrake/test2.git
git branch -M main
git push -u origin main
拉取代码:
git pull origin main
git log # 查看提交记录
查看文件状态:
git status // 显示有变更文件的状态
工作区域文件状态:
A test.css #A代表新加入到暂存区中的文件
M test.html #M代表文件被修改,且被加入到了暂存区
查看提交历史记录:回顾项目的提交历史
git log # 查看提交历史
git log -2 # 查看最新的两条提交历史,数字可以更改
git log --oneline #一行展示修改记录
# esc + :q 退出查看
git基础命令:
提交
git init // 新建 git 代码库
git add index.js // 添加指定文件到暂存区
git commit -m '提交消息' // 提交暂存区到仓库区
删除
git rm // 删除工作区文件,并且将这次删除放入暂存区
git rm -f index.js //从仓库和工作区同时移除index.js文件
git rm --cached index.css // 只从仓库中移除 index.css 但保留工作区中的 index.css文件
分支管理:
# 查看当前仓库中所有的分支列表
git branch
# -v 查看当前开发分支
# -r 查看远程所有分支
# -a 查看本地和远程所有分支
# 基于当前分支,创建一个新的分支
git branch 分支名称
# 切换到指定的分支进行开发
git checkout 指定分支
# 删除分支
git branch -d 分支名称
# 将完成后的代码合并到 master 主分支
git merge 合并分支
# git分支修改名字
git branch -m oldBranchName newBranchName
# 将远程仓库的变化下载下来,并没有本地分支合并
git fetch
# 将远程仓库的变化下载下来,并和当前分支合并merge
git pull
理解:
fetch
理解 fetch 的关键, 是理解 FETCH_HEAD,FETCH_HEAD指的是: 某个branch在服务器上的最新状态’。这个列表保存在 .Git/FETCH_HEAD 文件中, 其中每一行对应于远程服务器的一个分支。
当前分支指向的FETCH_HEAD, 就是这个文件第一行对应的那个分支,使用git fetch获取远程仓库最新代码,但是不会自动合并(merge),git fetch更安全一些,因为在merge(合并)前,我们可以查看更新情况,然后再决定是否合并。
常用:
# 查看之前提交版本的版本号
git reflog --oneline
# 跳转到最新的版本
git reset --hard
参考:
# 在一行上展示所有的提交历史
git log --oneline
# 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定的版本
git reset --hard
# 在旧版本中使用 git reflog --pretty=oneline 命令,查看命令操作的历史
# 注:这个命令可以查看之前所有的commit与reset命令
git reflog --pretty=oneline
# 再次根据最新的提交ID,跳转到最新的版本
git reset --hard
# 初始化 Git 仓库的命令
git init
# 暂存所有文件
git add .
# 提交版本记录
git commit -m
# 查看版本号
git reflog --pretty=oneline
# 回退版本
git reset <commit> # 这里我一般用--hard,具体看git常用指令表
建立本地与远程仓库关联
本地仓库提交至远程仓库:
git init #仓库初始化
git add . #
git commit -m "初始化" #将文件提交到本地
# 将本地仓库与远程仓库进行关联,并把远程仓库命名为origin
# 别名唯一,地址是 .git 结尾的网址
git remote add origin [email protected]:CaptainDDDrake/proj3.git
# 将本地分支 main 重命名为 main
git branch -M main
# 将本地仓库中的内容推送到远程的origin仓库中
# 注意:第一次推送分支需要带 -u 参数,此后可以直接使用 git push 推送代码到远程分支
git push -u origin main
1-推送本地分支至远程仓库:
# -u 表示把本地分支和远程分支进行关联, 只在第一次推送的时候需要带-u
git push -u 远程仓库的别名 本地分支名称:远程分支名称
# 例子
git push -u origin payment:pay
# 如果远程分支的名称和本地分支名称保持一致,可以对命令进行简化:
git push origin payment
2-远程仓库克隆
具体步骤看Github基础:
# 将远程仓库克隆到本地
git clone https://gitee.com/lidongxu/work.git
3-查看Git项目远程仓库地址
命令:
git remote -v
注意:这个得在使用git的项目目录下
案例:
nathanchen@NathansMacBook-Pro clone-test % git remote -v
origin [email protected]:CaptainDDDrake/Raabbit.git (fetch)
origin [email protected]:CaptainDDDrake/Raabbit.git (push)
上传代码:
git add .
git commit -m 'ChangeTitle'
git push origin main # origin main 指将本地main分支push到远程仓库中
拉取代码:
git pull origin main
git log --oneline #一行展示修改记录
理解:pull的作用
git pull origin master
#等价于
git fetch origin master:master #(获取远程分支记录到本地,未合并)
git merge origin/master #(把远程分支记录合并到所在分支下)
查看远程仓库中所有的分支列表:
git remote show 远程仓库名称
# 例子
nathanchen@NathansMacBook-Pro Bevent % git remote show origin
* 远程 origin
获取地址:https://github.com/CaptainDDDrake/BigEvent.git
推送地址:https://github.com/CaptainDDDrake/BigEvent.git
HEAD 分支:main
远程分支:
main 已跟踪
为 'git pull' 配置的本地分支:
main 与远程 main 合并
为 'git push' 配置的本地引用:
main 推送至 main (本地已过时)
查看本地的远程仓库名称:
git remote -v
# 例子
nathanchen@NathansMacBook-Pro Bevent % git remote -v
origin https://github.com/CaptainDDDrake/BigEvent.git (fetch)
origin https://github.com/CaptainDDDrake/BigEvent.git (push)
Q:误将代码提交到暂存区中(git add)
解决办法:利用 git reset 命令将撤回缓存中的代码。
Q:误将暂存区代码提交到本地仓库(git commit)
解决办法:
git reset —soft + 版本号
回退到某个版本,只回退了commit的信息,不会改变已经修改过的代码。
git reset —hard + 版本号
彻底回退到某个版本,本地的代码也会改变上一个版本内容
Q:rebase解决:git error:您对下列文件的本地修改将被合并操作覆盖
解决方案:
拉取合并:
git pull --rebase ori master # ori 远程仓库的别名 master 远程以及本地分支的名字
或者,还没试
# 先处理完C,会继续报D的冲突,所以下面命令一共会执行两次
git add file
git rebase --continue
上面的例子可抽象为如下实际工作场景:远程库上有一个master分支目前开发到B了,张三从B拉了代码到本地的feature分支进行开发,目前提交了两次,开发到D了;李四也从B拉到本地的master分支,他提交到了M,然后合到远程库的master上了。此时张三想从远程库master拉下最新代码,于是他在feature分支上执行了git pull origin master:feature --rebase(注意要加–rebase参数),即把远程库master分支给rebase下来,由于李四更早开发完,此时远程master上是李四的最新内容,rebase后再看张三的历史提交记录,就相当于是张三是基于李四的最新提交M进行的开发了。(但实际上张三更早拉代码下来,李四拉的晚但提交早)
Q:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支
问题:
nathanchen@NathansMacBook-Pro Bevent % git push origin main
To https://github.com/CaptainDDDrake/BigEvent.git
! [rejected] main -> main (non-fast-forward)
错误:无法推送一些引用到 'https://github.com/CaptainDDDrake/BigEvent.git'
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull ...')。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。
因为您当前分支的最新提交落后于其对应的远程分支
意味着远程分支上发生了您本地没有的更改
所以我们需要用git pull origin master指令将远程代码库与本地代码库同步一下,但是可能会出现“fatal:拒绝合并无关历史。”的错误
解决方案:
使用-f
标签,您将使用您的代码覆盖远程分支代码。
git push -f origin master
步骤:
1-找到setting
2-在setting的最下面的 Delete this repository 选项