Git 学习笔记
本文最后更新于 835 天前,其中的信息可能已经有所发展或是发生改变。

Git 介绍

总述

git 是用树形结构管理维护代码各个版本分支的工具,代码的记录类似结点一般保存

从库中拿出一个版本的代码,更新后存成一个新结点,可以随时回滚 / 查看历史版本,以及多人协作

概念

  1. 工作区:仓库的目录文件夹,不涉及分支

  2. 暂存区:暂时存放每个文件的状态,可认为是工作区到版本库的缓存,不涉及分支

  3. 版本库:长期存放所有已经提交到本地仓库的代码版本

  4. 版本结构:树结构,树中每个节点代表一个代码版本

可以认为树随着版本更新不断维护顶端结点 HEAD 指针(指向一个分支的最新版本)

Git 命令

全局设置
git config --global user.name 名字    # 设置全局用户名,信息记录在~/.gitconfig文件中
git config --global user.email 邮箱   # 全局邮箱地址,信息记录同上

git init    # 将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中

常用命令

git add XX  # 将文件的修改状态加入暂存区(包括创建,修改,删除)
git add .   # 所有未加入的都加入

git commit -m "备注"    # 将暂存区内容提交为当前分支的新结点(同时清空暂存区)

git status  # 查看仓库状态(未管理文件,未提交文件,暂存区状态改变未更新的文件等)

git diff XX # 查看文件相比暂存区修改了哪些内容

git log # 查看当前分支的所有版本(只能看前面,不能看后面)
git log --pretty=oneline    # 用一行来显示,看起来清楚

git push -u # (第二次以后不需要-u) 将当前分支推送到远程仓库
# -u 是 --set-upstream 的缩写

git pull    # 将远程仓库的当前分支与本地仓库的当前分支合并
# 注意点:本地未commit,且未放入stash的修改会被覆盖;合并可能要处理冲突

git clone git@远程仓库域名:远程路径.git   # 将远程仓库XXX下载到当前目录下

git branch  # 查看所有分支和当前所处分支
查看命令
git reflog  # 查看HEAD指针的移动历史(更新和回滚)
删除&回滚
git rm 文件名  # 删除工作区和暂存区的文件

git rm --cached 文件名 # 从暂存区里移除
git restore --staged 文件名    # 从暂存区里移除

git restore 文件名 # 从暂存区移出并覆盖工作区
# 若暂存区空,就将仓库HEAD指向版本覆盖到工作区
git checkout -- 文件名 # 同上,这两个命令还可以回滚误删的文件

# 可以将删除后的暂存区commit,就会将删除后的版本加入仓库
# 注意,在使用仓库代码时只关注HEAD当前指向的版本,说到底还是一个目录,只是有强大的备份能力
# 所以所谓删除仓库内文件,指的是更新一个删除后状态的版本

理解:工作区是本地的工作文件,把文件希望被保存的状态放在暂存区,最后将暂存区传到仓库中保存为一个版本备份

# 加上 --hard 后,回滚会删除仓库新版本,同时把工作区文件也回滚到指定版本
git reset --hard HEAD^  # 一个^代表往上回滚一个版本(HEAD指针移动,回退本地仓库)

git reset --hard HEAD~  # 代码库回滚到上一个版本
git reset --hard HEAD~100   # 后面加数字表示回滚次数

git reset --hard 版本号    # (向前或向后)跳转到某一特定版本,版本号是reflog前的哈希值

# 没有 --hard 时,回滚变成直接往回移动 HEAD 指针,不会真正删掉版本。而工作区不会自动改变,需要手动 checkout
git reset   # 其他用法相同

远程仓库

远程代管能避免本地仓库意外丢失的情况,有的还提供图形化界面,直观显示版本分支树

本地的 .git 目录内就包含本地仓库,代码的修改记录和版本都在其中

类似的,要取得的云端仓库,路径后也有一个 .git 后缀

git remote add origin ssh邮箱:仓库路径.git    # 将本地仓库关联到远程仓库
# origin 是惯用的远程仓库名,在远程有一个名叫origin的仓库与本地对应,下面都用origin代称

git push -u origin master   # (首次)推送当前分支到远程仓库,master为默认分支
git push    # (第二次开始)推送当前分支到远程仓库
git push -u origin 分支名  # 将某个分支推送到远程仓库

云端上可以直观地查看提交记录,可以点选版本,浏览代码或回滚

克隆到本地的文件能保持树形结构,但没有 HEAD 的移动日志

git clone ssh邮箱:仓库路径.git    # 将远程仓库下载到当前目录

git push --set-upstream 远程仓库名 分支    # 使本地的该分支对应远程仓库的同名分支
git push -d origin 分支   # 删除远程仓库的某个分支

git checkout -t origin/分支   # 将远程的某个分支拉取到本地

git pull    # 将远程仓库的当前分支与本地仓库的当前分支合并
git pull origin 分支  # 将远程仓库的某个分支与本地仓库当前分支合并

git branch --set-upstream-to=origin/分支A 分支B # 将远程的分支A与本地的分支B对应

分支

默认(主)分支是 master,多分支会用于更复杂的版本树,多用在多人开发的情况

创建分支相当于新的头结点,还没有一条实体分支,但分支确实存在,commit 后才会形成。

整个树共用暂存区和工作区

本笔记中的涉及 HEAD 移动的命令都会改变工作区内容,此外有些命令可以不改变工作区

git branch 分支名  # 创建新分支

git branch  # 查看所有分支和当前所处分支(*)

git checkout -b 分支  # 创建并切换到这个分支,等于branch + checkout
git checkout 分支名    # 切换到分支

git merge 分支名   # 将分支合并到当前分支上
# 如果当前分支 HEAD 不是引出支路的点,合并会有冲突,需要处理冲突,之后分支上保存处理后的版本
# 合并成功后会直接影响当前工作区的文件

git branch -d 分支名   # 删除本地仓库的此分支(类似释放头结点,如果没有合并就删除会提醒)

git push --set-upstream origin 分支名  # 将远程的某分支与本地当前分支对应,没有就创建
# push的时候对应联系,但平时数据是独立的,而且名字可以不同
git branch --set-upstream-to=origin/分支A 分支B # 将远程的分支A与本地的分支B对应

git push -d origin 分支   # 删除远程仓库的某个分支

git checkout -t origin/分支名  # 将远程的某分支拉取到本地
git pull    # 将远程仓库的 对应分支 覆盖到本地仓库的当前分支
# 再 git checkout 就可以覆盖到工作区
git pull origin 分支名 # 将远程仓库的 指定分支 覆盖到本地仓库当前分支
  1. 跨端的合并,表现出来就是覆盖
  2. 云端仓库内部合并可由鼠标完成,略过

  • 学完以上内容后,看看这张图加深理解

img

stash暂存(使用场合较少)
git stash   # 将工作区和暂存区中尚未提交的修改存入stash中

git stash apply # 将stash存储的修改恢复到当前分支,但不删除元素
git stash drop  # 删除存储的修改
git stash pop   # 将存储的修改恢复到当前分支,同时删除元素

git stash list  # 查看stash中所有元素
  • 可能的使用场景:

    1. 一个新分支,文件的 commit 进行一半时意外断电,导致部分内容未 commit。主机恢复后,希望重新提交为新分支结点

      此时将未提交的文件加入 stash,再将已经提交的部分合并入主分支,不影响 stash 内的文件,再新开一个分支进行新的 commit

    2. 工作区迁移,或是操作问题导致版本不同步,此时新的修改未 commit,可以加入 stash,待其他内容合并、同步版本后再取出

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇