整理一下 git 命令,用时总会忘记。
Git常用命令
- git 克隆远程分支仓库
git 克隆远程仓库项目时如果不指定分支,只会克隆默认分支内容
git clone -b 分支名称 远程地址
- 查看 git 用户名和邮箱
git config user.name
git config user.email
- 设置 git 账号
git config --global user.ame "foo"
git config --global user.email "foo@email.com"
git config user.name "foo"
git config user.email "foo@mail@com"
- 查看 git 账号
git config --global --list
git config --local --list
- 仅查看某一项配置
git config --local user.name
- 分支相关命令操作
git branch (查看当前分支)
git branch -a (查看所有分支)
git branch 分支名 (创建分支)
git branch -d 分支名(删除分支)
git branch D 分支名 (强制删除未合并的分支)
git checkout 分支名 (切换到对应分支)会自动将代码更新为分支代码
git checkout -b 分支名 (`基于分支名或commit值` 切换分支并直接切换过去)
- 查看 git 历史命令
history
- 按照关键词搜索 git 历史命令
history | grep push
- 查看 commit 历史
git log
git log --summary (--summary 查看已经提交的文件详细变化)
- 对比2个分支的日志
git log dev..master
- 回滚本次修改
git reset HEAD foo.js
git checkout -- foo.js
- 查看本次修改的代码
git diff
git diff HEAD
git diff --staged
- 提交后发现丢了几个文件未提交
// 重新添加
git add "*.html"
// 重新提交
git commit --amend
- 缓存某种后缀的文件
git add "*.js"
- 清除缓存区中的文件
git reset 文件路径
- 彻底删除某种后缀的文件
git rm "*.html"
- 合并分支
git merge 分支名
- 取消合并
git merge --abort
- add . 之取消提交某些文件
git checkout -- <文件路径>
- 隐藏当前修改代码 保存至堆栈中
git stash
git stash save "命名"
- 释放堆栈中的代码
// 将当前stash中的内容弹出,并应用到当前分支对应的工作目录上 `注:该命令将堆栈中最近保存的内容删除(栈是先进后出)`
git stash pop
// 释放指定代码
git stash pop stash@{0}
- 查看堆栈(stash)目录
git stash list
- 删除某个 stash
// `stash@{0} 为栈中名称`
git stash drop stash@{0}
- 清除 stash 所有内容
git stash clear
- 误删除stash
git fsck --unreachable |
grep commit | cut -d\ -f3 |
xargs git log --merges --no-walk --grep=WIP
// 找到对应的 commit hash值
git stash apply hash值
- 删除远程分支(次分支必须是非默认分支)
git push origin --delete branchname
- 已经commit,强制退回到旧版本
git log // 找到对应 commit hash 值
git reset --hard hash值
- 回退一次commit
git revert Head/[commit hash]
- 设置远程仓库地址
git remote set-url origin git@foo.bar.com:a/hello.git
- 本地创建了新分支,但是 origin 没有,push代码前
git push --set-upstream origin preproduction
- 指定 tag 到远程
git push origin <tag_name>
- 将全部 tag 推送到远程
git push --tags
- 查看当前 tags
git tag --list
- 仅删除index 不删除 working tree的.idea文件
// --cached 仅删除index, -r(recursive) 递归删除.idea目录下的所有文件
git rm --cached -r .idea
- git 主动 track 文件,控制文件,做好提交准备
git add <file(s)>/.
- git unstage 文件,释放文件 选择性控制
git reset HEAD <file(s)>/.
- 暂存区文件如何覆盖工作目录文件
git reset HEAD <file(s)>/. && git checkout -- <files>/.
- 提交已经被 git 管理,修改过为红色的所有文件
git add -u
- 重置工作区和暂存区的所有文件为原始状态
git reset --hard
- 比较当前分支与某次提交的区别
git diff HEAD [commit has fragment]
- 同步到 remote 后,合并多个 commit 为1个
git rebase -i HEAD~2/hash
pick && squash
:wq!
- 查看项目的 origin 代表地址
git remote -v
- pick 中途误退出
git rebase --abort
- 未同步到 remote,重新提交
reset soft
- 撤销远程分支错误提交
...reset
git push --force
- 误删除领先远程的本地如何恢复
git reflog // 找出最新的commit sha1值HEAD@{1}比HEAD@{2}新
git branch branchName <sha1>
- git fetch 与 git pull的区别
git fetch 更新 origin/*下所有的分支,在发布git flow feature 前很有用,用于更新remote分支
git pull 主要用来更新多人合作的当前分支,多用于更新local分支
- 远程删除分支,本地git fetch 不能更新到最新分支
git fetch --prune
`-prune: Before fetching, remove any remote-tracking references that no longer exist on the remote.`
- 及时查看本地所有分支状态
git remote show origin
-假如远程已经不存在分支,git fetch --prune也更新不到状态,该如何做?
git push origin --delete feature/fix-chat-unread-msg-async
- 删除单个脱离的远程分支
git remote prune <name>
- 添加.gitignore后的文件名,.gitignore不生效
git rm -r --cached 文件名
- git 工作区和暂存区的区别
add commit
工作目录 ------------> 暂存区 ------------> 版本历史
暂存区:git已经获得了对文件的管理权限,暂存区文件有状态:new file,deleted,modified等等。
版本历史:git log查看每一次commit记录。
网友评论