git笔记

git 笔记

  • 如果你使用VScode可能永远用不到这些基本命令

账号设置

  • 设置github账号
git config --global user.name "wufeng15226"
git config --global user.email [email protected]
git config --list

本地仓库命令

  • git 用户设置
    • 这里使用了ssh秘钥登入
  • 选取某一文件夹作为仓库,仓库初始化
git init
  • 为工作区的文件添加到暂存区,在commit前可多次添加
    • 下方的warning表示文件中的回车会自动转化为CRLF(\r\n),这里其实没有改变
    • 之所以会出现这样的warning,是因为Linux系统中回车是LF(\n),相同的文件可能在不同的系统上有不同的形式,这就很恶心人,所以git在处理时根据系统自动转化了
git add <文件名>
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory
  • 将已经暂存区的版本提交到本地仓库作为一个新版本,默认需要备注
    • -a命令可以跳过添加工作区到暂存区的过程直接把工作区作为版本提交到仓库
git commit -m "提交备注"
git commit -am "提交备注"
  • 查看仓库状态,对比本地工作区和暂存区的不同
git status
  • 查看本地工作区和暂存区的不同,和git status相比只会查看已经add的文件
git diff
  • 查看commit历史
git log
  • 查看版本变化历史
    • 这里可以查看对仓库的所有操作,也有版本号信息
git reflog
  • 版本回退与选择
    • HEAD表示当前版本,~n表示回退到前n个版本,不加n表示回退到上一个版本
    • 不加–hard则只会把版本回退到暂存区而不是工作区和暂存区
    • 也可以通过git log/reflog命令查看版本号再变化版本(只需要能唯一辨别的前几位即可)
git reset --hard HEAD~
git reset --hard <版本号>
  • 丢弃工作区的某文件修改,回退到上一个版本
    • 不加HEAD则只会从暂存区而不是版本库回退该文件版本
git checkout HEAD -- <文件名>
  • 删除暂存区的文件
git rm <文件名>

git 区域概念

  • 工作区:本地工作目录
    • 其中有暂存的文件,也有修改过的文件
  • 暂存区
    • 文件通过git add进入暂存区
  • 本地仓库/版本库
    • 暂存区作为一个新版本通过git commit进入本地仓库
  • 见图

0

1

远程仓库

  • 添加远程仓库
    • wufeng15226为我的用户名,newTest为远程仓库名,可以和工作区目录名不同
    • origin一般表示远程分支
git remote add origin [email protected]:wufeng15226/newTest.git
  • 把本地仓库分支推到远程分支
    • -u参数会关联本地的main分支和远程分支origin/main,方便以后简化命令
    • –force参数会强制push到远程库
git push -u origin main
  • 删除远程仓库
    • 只是接触关联关系,远程库并没有改动
git remote rm origin
  • 克隆远程库
    • 可以使用SSH或HTTPS来下载,但SSH较快
git clone [email protected]:wufeng15226/GitTest
  • 拉取远程库
git pull

分支管理

  • 创建并跳转到新分支
git switch -c <分支名>
# 等同于下面两个命令
# git branch <分支名> # 新建分支
# git switch <分支名> # 切换分支
  • 查看当前分支
git branch
  • 合并分支
    • 可能发生冲突,git会在文件中标识,需要自己在本地处理后重新commit
git merge <分支名>
  • 删除分支
git branch -d <分支名>
  • 分支管理策略
    • git默认使用fast forward进行合并,在没有冲突的时候(如更新分支净增加时)仅移动指针来完成任务,这个时候两个分支的终点可能是一个,合并分支后可能丢掉信息,不知道究竟更新是谁开发的。
    • 使用–no-ff参数则不仅仅是指针移动,而是在当前分支创建一个新的commit(所以默认需要注释),这个时候两个分支的终点一定不一样,但内容可能一样。
    • 开发时注意main/master应该是较稳定的,有多个开发分支,大家都时不时地往dev分支上进行合并
git merge --no-ff -m<注释>

参考


git笔记
http://example.com/2021/11/22/git笔记/
作者
zty
发布于
2021年11月22日
许可协议