git速查笔记

date: 2013.05.23; modification:2018.08.29

目录:

1 git

1.1 配置

1.2 创建仓库

1.3 将本地仓库push到远程已有的空仓库

1.4 克隆仓库

1.5 忽略

全仓库有效(其他人clone仓库也有效)

cd $WORK; echo "*.d" > .gitignore; git add .gitignore; git commit # 方法1

vi $WORK/.git/info/exclude # 加入被忽略文件名 # 方法2

子目录有效

.gitignore放在子目录, 则其下所有子集有效.

个人git全局有效

git config --global core.excludesfile /path/to/.gitignore

1.6 查看log

1.7 查看版本细节

1.8 协同工作

1.9 撤销与恢复

1.10 添加远程仓库

1.11 分支

1.12 查看信息

1.13 tag

1.14 储藏

1.15 git修改本地历史提交

git使用amend选项提供了最后一次commit的反悔. 但是对于历史提交呢, 就必须使用rebase了.

git rebase -i HEAD~3

表示要修改当前版本的倒数第三次状态.

这个命令出来之后, 会出来三行东东:

pick:*******

pick:*******

pick:*******

如果你要修改哪个, 就把那行的pick改成edit, 然后退出.

这时通过git log你可以发现, git的最后一次提交已经变成你选的那个了, 这时再使用:

git commit-amend

来对commit进行修改.

修改完了之后, 要回来对不对?

使用

git rebase --continue

OK, 一切都搞定了.

1.16 删除已经提交的历史

git 删除历史提交(git push过的内容)

git reset --hard 哈希值

git push -f (强制更新)

1.17 submodule

前提: 两个原本独立的仓库, main和sub, 假如要把sub作为main仓库的submodule.

1.17.1 添加submodule

cd localmain
git submodule add REPOS/main mysub # 将远程的REPOS/main仓库, 作为子模块, 添加为mysub

此时用git status可以看到, 在localmain下出现了一个.gitsubmodule以及mysub目录. sub仓库的内容已经clone到mysub下了. 但是status显示.gitsubmodule和mysub都是新添加状态. 此时需要像正常commit以及push一样, 将他们提交并同步到服务器上去. 这样别人才能在clone main仓库后, 同步到sub.

1.17.2 同步submodule

按照上述添加submodule后, 别人clone了main之后, 就可以看到main/mysub目录, 但是这个目录是空的, 而且查看main的.git/config也看不到submodule的信息. 需要用如下命令将submodule信息取下来.

git submodule init

此时应该可以看到.git/config里面有了submodule描述信息了. 但是其真正的具体内容还没有同步下来. 还需要进一步:

git submodule update

这时, 本地clone的main/mysub就有了内容了.

1.18 其他

git rm -cached file1 # 删除file1的暂存记录, 但是不删除本地文件.

2 repo