git最最基本命令(怎么克隆、上传)
#(将远程仓库的代码克隆到本地) git clone + 远程仓库地址
#(将工作区的改动添加到暂存区) git add .
#(将暂存区的文件提交到本地库) git commit -m [message]
#(将本地库的代码上传至远程仓库) git push
#(将远程库的更新拉取到本地库) git fetch
#(通过merge合并分支,通过 git config merge.ff 设置默认合并策略)
git merge 默认为fast-forward模式,不产生新commit,当ff模式无法实现时,切换为no-ff模式
git merge --no-ff 关闭ff模式,会产生一个新的commit
git merge --ff-only 强制使用ff模式,当ff模式无法实现时,报错
git merge --squash 压缩合并,会抛弃一些无用的提交
#(通过rebase合并分支)
git rebase 变基
git rebase --continue 解决冲突后,继续rebase
git rebase --abort 取消rebase
#(将远程库代码拉取到工作区)
git pull 这个命令等于 git fetch + git merge
git重要命令(几乎天天用)
#(瞄一眼文件状态) git status [-s]
#(看一眼我具体修改过哪些代码)
git diff 比较工作区和暂存区
git diff --cached 比较暂存区和本地库
git diff HEAD 比较工作区和本地库
#(查看当前分支的所有提交记录) git log [--pretty=oneline]
#(查看所有分支的所有操作记录) git reflog
#(切换分支)
git checkout + 分支名 => 切换到已有分支
git checkout --track origin/branch_name => 切换到一个新分支并跟踪远程同名分支
git checkout -b myBranch origin/branch_name => 切换到一个新分支并跟踪远程分支
#(分支相关命令)
git branch 查看已经检出的分支
git branch -a 查看所有本地库的分支
git branch -v 查看分支及最后一笔提交的commit id
git branch -vv 查看分支、commit id、关联的远程分支
git branch -D 删除分支
#(代码出问题了,我要回滚)
git reset + 版本号 => 默认--mixed模式,重置到某个commit id下,仅保留工作区
git reset --soft + 版本号 => 会保留工作区和暂存区内容
git reset --hard + 版本号 => 啥都不保留
#(只想重置某一笔提交)
git revert + commitId 撤销文件并提交
git revert -n + commitId 撤销文件,需要手动提交
#(git reset只影响track了的文件,需要删除未track的文件用clean)
git clean -n 显示将要被删除的文件
git clean -f 删除未被track的文件
git clean -dn 显示将要被删除的文件和文件夹
git clean -df 删除未被track的文件和文件夹
#(切换分支时,除了commit提交外,还可以用stash贮藏)
git stash [save + 一些信息] 将不在本地库的修改贮藏起来(已不推荐)
git stash push [files] [-m message] 将不在本地库的修改贮藏起来(推荐)
git stash -u 保存所有文件
git stash list 查看贮藏记录
git stash show -p 显示最近一个贮藏的改动
git stash pop 弹出贮藏栈的顶层记录
git stash apply 恢复贮藏栈的顶层记录,保留在栈中
git stash drop stash@{num} 删除指定num的贮藏
git stash clear 删除所有贮藏
git进阶(玩点花的)
#(与上一次提交合并,会改变最近一次的commit id与message) git commit --amend
#(与上一次提交合并,会改变最近一次的commit id但不改变message) git commit --amend --no-edit
#(不想通过merge合并一整个分支,只需要其中几个commit)
git cherry-pick + hash => 抓取一个commit,生成一个新节点
git cherry-pick hashA..hashB => 抓取A到B中的所有提交,不包含A
git cherry-pick hashA^..hashB => 抓取A到B中的所有提交,包含A
#(这个命令很屌,可以认真学习) git rebase -i
git疑难杂症
git config core.ignorecase false => 让git区分文件大小写