git笔记

136 阅读4分钟
git init 初始化空仓库
git config --global user.name或者user.email 设置用户信息
git status 查看当前状态
git diff 旧 新 查看更改内容(可加参数-- 文件名)
git add 跟踪文件(若对象为文件夹则跟踪文件夹中所有文件,如.;若对象为-A,则添加所有文件)
git commit -m "sth" 保存一份当前所有跟踪文件的快照,注释为sth
git log 显示commit日志,带参数--graph可显示图形,带分支作为参数可以查看该分支的日志
git reset --hard <commit> 将head指针调整为指向commit(commit可以输入哈希值或HEAD~1,HEAD^等)
每个^表示向上一次,^num表示取多个父亲中的第num个
git revert <commit> 生成一个新的commit,在其中撤销了<commit>对应的改动(此操作易产生冲突)
git rebase <commit> 前提是commit不是head的祖先,将head及向前直到与commit分叉的地方,共同拷贝到commit下
git rebase -i <commit> 与直接rebase的区别是,可以自己选择排序
git checkout <commit> 可以切换到游离模式,来查看对应commit的文件
git checkout <commit> -- 文件名 将单个文件改为commit中的状态,且不改变仓库状态;此时再进行commit操作可以改变仓库状态
git checkout 分支名 切换分支
git checkout -b 'new' <commit> 在<commit>上创建一个新分支叫做new,并且切换到new分支
git cherry-pick <commit> 把<commit>对应的拷贝到目前的之后
git branch 'new' <commit> 从<commit>新建分支叫new,无<commit>参数则默认从当前版本新建分支new
git branch 默认列出所有本地分支,加-a可列出远程分支(用remotes/表示)
git branch -f master <commit> 把master分支的指向移动到commit上
git branch -d 分支名 删除分支
git branch -u origin/master 分支名 让origin/master追踪分支
git cat-file -p <commit> 查看<commit>的实体的内容
git merge 分支名 -m sth 合并分支,注释为sth
git merge --squash 分支名 合并分支,合并后的分支与被合并的分支无亲缘关系
在工作区根目录下创建一个名为.gitignore(没后缀)的文件 在其中配置你需要忽略的文件。如:
.o
.exe
__pycache__
git clone <远程连接地址> (<新建远程仓库名>) 相当于先init,再remote add,再fetch,再checkout。克隆一个远程仓库到本地仓库的远程分支,默认把远程分支命名为origin/master。
git remote add <远程仓库名> <远程连接地址> 将远程仓库与本地仓库对接起来,本地出现远程分支。假设命名为origin,便可以用origin/master表示远程仓库中的master分支。
git fetch <远程仓库名> git远程是惰性的,用此命令手动拉取刷新(用远程仓库刷新本地仓库中的远程分支),不合并
git fetch <远程仓库名> <远程仓库的分支名>:<本地分支名> 用远程仓库的分支名刷新本地分支名,称之为place参数(冒号前的source参数为空时,则传空分支)
git push <远程仓库名> <本地分支名> 将本地分支推送到远程仓库
git push <远程仓库名> <本地分支名>:<远程仓库的分支名> 把本地分支名推送到远程仓库的分支名
git pull <远程仓库名> <本地分支名> git fetch并merge,应用远程的修改(也可类似push和fetch加place参数)
git pull --rebase <远程仓库> 如果fetch之后不想合并,而想类似rebase把HEAD拷贝到fetch来的远程东西下,可以加此参数
fork(网页端操作) 把别人的仓库复制一份到自己的账户下
pull request(网页端操作) 把自己账户下的修改提交给上游维护者,由他审核后并入他的远程仓库内
git tag v1 <commit> 给commit添加标签v1
git describe <commit> 描述如下:<tag>_<num>_g<hash>其中tag是最近的祖先标签,num是tag与commit的距离,hash是commit的hash值