Git常用总结

2023-12-18 12:51:57

Git常用总结:

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

命令集合:

Untitled

Untitled




基础总结:

Git基础概念:

Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高

效地处理从很小到非常大的项目版本管理。



Git工作的四个区域:

Working Directory(工作目录)

即正在编辑的文件状态。文件状态为未跟踪(untrack)和已修改(modified)在此区域内

Staging Area(暂存区)

保存了下次将提交的文件列表信息。文件状态为已暂存(staged)在此区域内

Repository(本地仓库):提交到本地仓库的文件

Repository(远程仓库):已提交到远程计算机内的文件

Untitled

提交流程为:工作区》暂存区》本地版本库》远程版本库

特点:项目越大越复杂,协同开发者越多,越能体现出 Git 的高性能和高可用性!



Git文件的四种状态:

未跟踪(untrack):未追踪,表示文件为新增加的

已修改(modified):表示修改了文件,但还没将修改的结果放到暂存区

已暂存(staged):表示修改的文件提交到了暂存区,但是还没有提交到本地Git版本库

已提交(committed):表示数据安全提交到了本地Git版本库

注意:

工作区的文件被修改了,但还没有放到暂存区,就是已修改状态。

如果文件已修改并放入暂存区,就属于已暂存状态。

如果 Git 仓库中保存着特定版本的文件,就属于已提交状态。

Git工作区中的状态

Untitled



账号管理

多个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常用指令:

文件管理命令:

查看文件状态

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 <CommitID>

参考:

# 在一行上展示所有的提交历史
git log --oneline

# 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定的版本
git reset --hard <CommitID>

# 在旧版本中使用 git reflog --pretty=oneline 命令,查看命令操作的历史
# 注:这个命令可以查看之前所有的commit与reset命令
git reflog --pretty=oneline

# 再次根据最新的提交ID,跳转到最新的版本
git reset --hard <CommitID>


仓库管理命令:

本地仓库管理:

# 初始化 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 git@github.com: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	git@github.com:CaptainDDDrake/Raabbit.git (fetch)
origin	git@github.com: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)



Git常见问题:

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进行的开发了。(但实际上张三更早拉代码下来,李四拉的晚但提交早)

Untitled

Untitled

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

Untitled

2-在setting的最下面的 Delete this repository 选项

Untitled



文章来源:https://blog.csdn.net/CaptainDrake/article/details/135056921
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。