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"
一般操作时的步骤
- Someone pushed a new commit to github
- Use git fetch to sync remote master
- git merge origin/maser
将第二步和第三步合并在一起即为"git pull"
产生冲突(别人在此过程中又进行了一次提交),操作为
- Someone pushed a new commit to github
- Create a new commit on local master
- git fetch
- 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\) 删除远程分支

浙公网安备 33010602011771号