git 学习

状态、暂存、提交

    git init \(\rightarrow\) 初始化

    git status \(\rightarrow\) 查看当前状态

    tree .git \(\rightarrow\) 查看命令树

    git add . \(\rightarrow\) 暂存全部文件

    git commit \(\rightarrow\) 提交

    git commit -m "第一次提交"

    git log \(\rightarrow\) 查看历史提交

    git ls-files -s \(\rightarrow\) 查看哈希值

    git cat-file -p 哈希值(前四位即可)\(\rightarrow\) 显示改变

    git cat-file -t 哈希值 \(\rightarrow\) 显示类型

    echo "这是一个新文件">test.txt \(\rightarrow\) 创建txt文件

忽略ignore

    touch .gitignore \(\rightarrow\) 然后添加文件夹

    或者直接新建命名为.gitignore文件夹

分支及相关内容

    git branch

    git branch\(\rightarrow\) 列出所有分支

    git branch <branch name>\(\rightarrow\) 创建分支

    git branch -D <branch name>\(\rightarrow\) 删除分支<-d 确认删除; -D 强制删除>
git checkout dev \(\rightarrow\) 切换分支

    git checkout -b tmp 创建一个新分支[恢复误删的分支]

    git switch -C <new-branch-name>\(\rightarrow\)

    git reflog \(\rightarrow\) 列出所有分支及HEAD

    git diff \(\rightarrow\) 显示区别

远程仓库

    git remote add origin https://github.com/Weshp/git-learn.git

    git remote set-url origin https://gitee.com/weshp/git-learn.git 更换远程代码库

    git push -u origin master 推送到远程仓库

解压文件

    先把objects文件夹里的 .pack 文件移出来

    再用 git unpack-objects <文件目录 .git/pack-哈希值-.pack>

清理垃圾对象

    git fsck \(\rightarrow\) 查看git库里的垃圾对象

    git gc \(\rightarrow\) 清理不必要的文件并优化(压缩)本地存储库

    git prune \(\rightarrow\) 从对象数据库中修剪所有无法访问的对象

git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0
-c gc.rerereresolved=0 -c gc.rerereunresolved=0
-c gc.pruneExpire=now gc $\rightarrow$ 删除没用文件彻底的

合并

Fast Froward

    假设 merge 在第 s 期,dev 分支在第s+1期,我们 checkout 分支到 master,然后执行git merge dev 可以将 master 合并到 s+1 期

3 way merge

回滚

    git reset orig_head

重构

    git rebase master \(\rightarrow\) 假设dev分支超强master两步,rebase将master重构到和dev同步(直接将dev分支的新东西加到master分支上),master形成新的两次commit达到和dev一样。

标签

Lightweight类型标签

    建立一个指针指向commit

    git tag v1.0.0 \(\rightarrow\) 打上标签v1.0.0.0

    git tag \(\rightarrow\) 显示标签

    git tad -d v1.0.0.0 \(\rightarrow\) 删除标签

Annotated类型标签

    建立指针、对象、信息、作者信息和日期(相对较为复杂)

    git tag -a v1.0.0 -m "version 1.0.0"

本地分支和远程分支的问题

查看

    git clone + 仓库地址 \(\rightarrow\) 克隆分支到本地

    git branch -r \(\rightarrow\) -r代表查看远程仓库分支(例: git log -r)

    git branch -a \(\rightarrow\) 查看本地分支和远程分支

    git branch -vv \(\rightarrow\) 远程和本地的区别(远程代码分支并不代表本地分支,它们是两个不同的东西)

分支同步问题

    git fetch \(\rightarrow\) 检查远程仓库的状态并对每个状态进行同步(只能将远程同步到本地而不能反过来)

    git fetch --prune \(\rightarrow\) 将本地有远程没有的进行删除并同步 == git remote prune

    git remote prune \(\rightarrow\) 将本地有远程没有的进行删除

    git remote \(\rightarrow\) 直接回车,显示远程仓库的名字

    git remote -v \(\rightarrow\) 打印远程仓库的url

    git remote show origin(远程分支名) \(\rightarrow\) 显示远程分支当前情况

远程分支合并到本地

    git branch -vv \(\rightarrow\) 远程和本地的区别(远程代码分支并不代表本地分支,它们是两个不同的东西ahead和behind)

    git merge origin/master \(\rightarrow\) 本地分支将远程分支拉取下来

difference of "git pull" & "git fetch"

一般操作时的步骤

  1. Someone pushed a new commit to github
  2. Use git fetch to sync remote master
  3. git merge origin/maser

    将第二步和第三步合并在一起即为"git pull"

产生冲突(别人在此过程中又进行了一次提交),操作为

  1. Someone pushed a new commit to github
  2. Create a new commit on local master
  3. git fetch
  4. git merge origin/master

    3、4也可以合并为git pull origin/master

git push 推送

    git push --set-upstream origin <分支名称> \(\rightarrow\) 推送新建分支到远程分支,其中--set-upstream表示与远程进行关联的意思,可以简写为 git push -u origin

    git push origin <分支名称> \(\rightarrow\) 也可以,但未进行关联(第一次建议用上面的)

    使用 git branch -a 、 git branch -vv进行验证

    git push origin -d <分支名> \(\rightarrow\) 删除远程分支

posted @ 2022-03-13 21:59  海绵宝bao  阅读(52)  评论(0)    收藏  举报