Git 常用指令
git init #初始化一个本地git库,分支名默认master
git config --global user.name “用户名”
git config --global user.email “邮箱” #设置用户名和邮箱
git config --list #查看当前git配置
git clone <url> newname #获取git仓库的拷贝,并重新命名
git status #查看当前git状态
git log #查看提交记录
git reset --hard HEAD^ #将当前git版本恢复到最后一次提交后的前一次,使用如cat readme.txt方式查看文件内容
git add <文件名> #开始跟踪一个文件,如要跟踪所有,使用git add .
git diff --staged #对比已暂存文件与最后一次提交的文件差异,git diff本身只显示尚未暂存的改动
git commit -a -m #提交暂存区文件,-a自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add,使用-m将提交信息与命令放在同一行
git commit --amend #这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会-保持不变,而你所修改的只是提交信息。
git rm --cached #将文件从git仓库中删除,--cached表示仍保留在当前工作目录中
git checkout -- <file> #撤销未暂存文件做的修改, 请务必记得 git checkout -- <file> 是一个危险的命令。 你对那个文件在本地的任何修改都会消失——Git 会用最近提交的版本覆盖掉它。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令
git reset HEAD <file> #撤销暂存,结合checkout可以实现撤销暂存文件的修改
git remote -v #查看远程仓库 与其对应的URL和简写
git remote add pb https://github.com/paulboone/ticgit #运行 git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写
git remote rm pb #删除与远程仓库的关联
git clone <HTTP> #克隆远端仓库,在本地自动创建master分支
git branch //查看本地分支
git branch -r //查看远程分支
git branch -a //查看本地和远程的所有分支
git branch <分支名> #新建本地分支
git checkout <分支名> #切换分支
git push origin <分支名> #把本地分支推到远端,让远端也有一个分支,用来后面提交代码
git push -f <远程仓库名> <远程仓库分支> #使用本地仓库文件覆盖远程仓库,即强制推送
git checkout -b <分支名> #新建分支并切换到该分支
git pull --rebase origin <远程分支名> #从远端更新本地,等效于git fetch和git merge的组合体,$git pull origin master --allow-unrelated-histories解决本地和远程仓库没有联系的条件下pull
git branch -d <分支名> #删除本地分支(切换到master分支之后再删除)
git push origin --delete <分支名> #删除远端分支
git fetch origin <分支名>:<分支名> #从远程抓取本地没有的分支
git merge <分支名> #如有test和dev两个分支,test分支基于dev分支,先git branch查看自己在哪个分支上,然后git checkout dev切换分支,最后git merge test (在dev分支上执行这句,意思是将test合并到dev分支上
创建.gitignore文件 #设置文件无需纳入git的管理
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git submodule update --init --recursive 克隆仓库后添加子模块
git submodule add <url> <path> 增加子模块
git submodule deinit <path> 删除子模块