Git学习要点

文章目录

  • 第一章 Git基础
  • 第二章 独自使用Git常见场景
    • 1. 删除分支
    • 2. 修改commit信息
    • 3. HEAD, 暂存区,工作区
    • 4. 回滚commit
    • 5. 比较commit
    • 6. 删除文件
    • 7. gitignore
    • 8. Git 本地备份
  • 第三章 Git 和 Github 简单同步
  • 第四章 Git 多人单分支集成协作时的常见场景
  • 第五章 Git 集成使用禁忌
  • 第六章 GitHub

第一章 Git基础

8/2

local vs global
git config --global修改全局配置(user.name,user.email等)

git config --local修改局部配置(具体到某个仓库,user.name,user.email等)
local 优先级更高

常用命令
ls 查看文件
ls -a 查看所有文件包括隐藏文件
vim newfilename 创建新文件(i,插入,esc+:wq保存,退出)

8/3
git add -u将已追踪的文件添加至暂存区(即修改,删除)
新版:git add . = git add -A(添加,修改,删除)

git add . 会把本地所有untrack的文件都加入暂存区,并且会根据.gitignore做过滤,
但是git add * 会忽略.gitignore把任何文件都加入

git mv oldfilename newfilename直接add了

linux命令
mv oldfilename new filename(重命名)

git resetgit reset --soft
回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉

8/4
git log --oneline精简版git log
git log -n3最近的三次版本变更
git log --all所有分支的演变
git log mastermaster分支的演变
git log --graph图形化演变

gitk图形化界面gui

cat onefile打印某个文件内容
git cat-file -t 哈希值对象类型
git cat-file -p 哈希值对象内容

  • .git

objects中记录对应时刻提交的文件/夹
pack代表git已打包的文件
Git学习要点_第1张图片

  • git 对象 commit tree blob
    Git学习要点_第2张图片

8/5
git diff 76we688g wi9ef89h查看两个commit差异

git diff HEAD HEAD^1(父辈)

HEAD和branch

head指向当前branch
head 可以分离,即不知向某个分支而是某次commit,但再次commit后要checkout新分支,不然本次操作会被当做垃圾处理

第二章 独自使用Git常见场景

1. 删除分支

git branch bname 创建新分支
git branch -d/D bname删除分支(D为强制)

2. 修改commit信息

git commit --amend 修改最新commit信息
git rebase -i Id 修改历史commit(Id为待修改commit的父节点)
(还可合并多个commit, 连续非连续皆可以)

被修改的commit的Id会变

3. HEAD, 暂存区,工作区

git diff --cached查看 暂存区 对于 HEAD 变化
git diff查看 工作区 对于 暂存区 变化

后面加文件名表示查看某个文件的变化,如: git diff --cached hello.md

git restore --staged 暂存区恢复成和HEAD一样,推荐

git reset HEAD ,效果一样,

git restore 工作区恢复成跟暂存区一样

恢复某个文件,* 恢复所有文件

4. 回滚commit

git reset --hard ID 消除最近的几个commit
HEAD, 工作区,暂存区全部都回到ID对应的commit

5. 比较commit

git diff ID1 ID2 比较ID2对于ID1的变化

6. 删除文件

git rm
等价于
rm +git add/rm

7. gitignore

github/gitignore
语法:类正则表达式

忽略 .a 文件
.a
但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件
!lib.a
仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO
/TODO
忽略 build/ 文件夹下的所有文件
build/
#忽略build文件夹下的所有文件,但不包括build文件夹本身
build/

忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/.txt
忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/
.pdf

8. Git 本地备份

git clone --bare "pwd path" name.git哑协议

git clone --bare file://"pwd path" name.git 智能协议(更快,更压缩)

第三章 Git 和 Github 简单同步

git branch -v本地分支
git branch -va所有包括远端
git remove origin删除某个远端分支

远端已有readme等文件的情况下,本地仓库如何避免push冲突
git fetch origin master+git merge --allow-unrelated-histories origin/master

add remote 分支时应用ssh协议,免去登录验证

第四章 Git 多人单分支集成协作时的常见场景

  1. 不同人修改不同文件
  2. 不同人修改同一文件不同区域
    git fetch获取改变
    git merge修改
    ===》git pull

git push推送

每次工作之前先pull,
每次push之前应先检查pull(可省,有冲突git会提醒)

  1. 不同人修改同一文件同一区域
    在1,2基础上 手动选择想要的修改即可

git mv oldfilename newfilename修改文件名

  1. 同时修改文件名和内容
    pull就对了,git自动识别

  2. 文件被不同人重命名为不同文件名
    新的两个文件都保留,旧的也保留,自己选择

第五章 Git 集成使用禁忌

禁用:git push -f强制推送,未pull的消失
禁止向集成分支执行变更历史

第六章 GitHub

  • 搜索技巧
    [gui高级搜索] https://github.com/search/advanced
    常用:
    name... in:readme
    name... stars:>1000

你可能感兴趣的:(tools,git)