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 reset
即 git 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 master
master分支的演变
git log --graph
图形化演变
gitk
图形化界面gui
cat onefile
打印某个文件内容
git cat-file -t 哈希值
对象类型
git cat-file -p 哈希值
对象内容
8/5
git diff 76we688g wi9ef89h
查看两个commit差异
git diff HEAD HEAD^1
(父辈)
HEAD和branch
head指向当前branch
head 可以分离,即不知向某个分支而是某次commit,但再次commit后要checkout新分支,不然本次操作会被当做垃圾处理
git branch bname
创建新分支
git branch -d/D bname
删除分支(D为强制)
git commit --amend
修改最新commit信息
git rebase -i Id
修改历史commit(Id为待修改commit的父节点)
(还可合并多个commit, 连续非连续皆可以)
被修改的commit的Id会变
git diff --cached
查看 暂存区 对于 HEAD 变化
git diff
查看 工作区 对于 暂存区 变化
后面加文件名表示查看某个文件的变化,如: git diff --cached hello.md
git restore --staged
暂存区恢复成和HEAD一样,推荐
git reset HEAD ,效果一样,
git restore
工作区恢复成跟暂存区一样
恢复某个文件,* 恢复所有文件
git reset --hard ID
消除最近的几个commit
HEAD, 工作区,暂存区全部都回到ID对应的commit
git diff ID1 ID2
比较ID2对于ID1的变化
git rm
等价于
rm
+git add/rm
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
git clone --bare "pwd path" name.git
哑协议
git clone --bare file://"pwd path" name.git
智能协议(更快,更压缩)
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 fetch
获取改变git merge
修改git pull
git push
推送
每次工作之前先pull,
每次push之前应先检查pull(可省,有冲突git会提醒)
git mv oldfilename newfilename
修改文件名
同时修改文件名和内容
pull就对了,git自动识别
文件被不同人重命名为不同文件名
新的两个文件都保留,旧的也保留,自己选择
禁用:git push -f
强制推送,未pull的消失
禁止向集成分支执行变更历史
name... in:readme
name... stars:>1000