总结一下自己在团队中常用的git命令
注:命令中的空格不可以省略 命令中未加粗的部分需要替换为自己的
将远程库代码 克隆到本地
git clone ... // 后面的 ... 是你远程仓库的地址,可以是https、https 或者 ssh地址,如果是第一次安装使用需要设置邮箱
git config user.name 你的用户名
git config user.email 你的邮箱
- 使用http和https第一次拉取时需要输入你在远程仓库中设置的 克隆账号和密码 (这个应该是单独设置的)
- 使用ssh地址拉取
注:ssh地址需要你 在本地生成公钥和私钥,然后将公钥设置到你所使用的代码库中 (可以查看本人的 配置 SSH 密钥 这篇文章 )
拉取远程代码以及提交本地修改的代码
上面我们将远程的代码库拉取到了本地,第一次拉取默认为master分支
- git pull // 拉取并合并远程代码到本地
- git add . // 保存全部已经修改的文件
- git commit -m "aaa" // 做了哪些修改可写入 "" 双引号里 可以为数字、中文、英文、标点(我只用过基本的标点)
- git push // 推送到远程仓库
- git push -u origin/branch // 远程已有branch分支但未关联本地分支localBranch且本地已经切换到localBranch
- git push origin localBranch:remoteBranch // 远程没有remoteBranch分支并,本地已经切换到localBranch
只提交部分修改了的文件
- git status -s // 查看仓库状态
- git add . // src/components/文件名 添加需要提交的文件名(加路径--参考git status 打印出来的文件路径)
- git stash -u -k // 忽略其他文件,把现修改的隐藏起来,这样提交的时候就不会提交未被add的文件
- git commit -m "aaa" // 做了哪些修改可写入 "" 双引号里 可以为数字、中文、英文、标点(我只用过基本的标点)
- git pull // 拉取合并
- git push // 推送到远程仓库
- git stash pop // 恢复之前忽略的文件(非常重要的一步)
分支创建切换删除
- git fetch // 同步远程分支与代码到本地
- git fetch origin test // 拉取远程的 test 分支到本地
- git branch dev // 创建一个名字为 dev 的分支
- git branch // 查看本地分支
- git branch -a // 查看所有分支(本地和远程)
- git branch -d dev // 删除本地名字为dev的分支(需要切换到非dev分支)
- git branch -D dev // 强制删除本地分支(需要切换到非dev分支)
- git push origin --delete dev // 删除远程分支名字为dev的分支
- git checkout dev // 切换到dev分支上(记着切换分支前要清理存储树)否则会切换失败
- git checkout -b dev // 创建名字为 dev 的分支 并切换到 dev 分支
- git checkout -b localDev origin/dev // 创建名字为 localDev 的本地分,并且同步绑定分支名为 dev 的远程分支
git 版本回滚
使用 commit 日志回退
- git log // 查看提交的代码日志 从近到远 ( --pretty=oneline 只看提交id和信息 )
- git reset --hard id // 根据 id 回退到指定的版本
使用 tag 回退
-
git tag -a v1.01 // 打标签,-a 是添加标签,后面是新标签号,可以加 -m 后面的字符串是对该标签的描述 例:git tag -a v1.01 -m "Relase version 1.01"
-
git tag 或 git tag -l // 查看标签
-
git push origin --tags // 提交标签到远程仓库 (像 git push origin master) --tags可以把本地的打的标签全部提交到远程仓库。
-
git tag -d v1.01 // 删除标签
-
git push origin :refs/tags/v1.01 // 删除远程标签
使用 git reflog 回滚(一般用于操作失误,这里举例:误删远程分支)
- git reflog --date=iso // 选项 --date=iso,表示以标准时间格式展示
- git checkout -b branch commitid // branch 为你要检出的分支名字一般为一个新分支,commitid 为执行git reflog 之后会显示
- git push origin branch // branch 为要同步的远程分支名字
git stash 使用
应用场景:copy这位大佬,详细的解释git stash:git stash详解_stone_yw的博客-优快云博客_git stash
1 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
2 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。
以下命令总结
- git stash save "aaa" // 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
- git stash list // 查看stash了哪些存储
- git stash show // 显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
- git stash show -p // 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
- git stash apply // 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
- git stash pop // 命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并 删除第二个:git stash pop stash@{1}
- git stash drop stash@{$num} // 丢弃stash@{$num}存储,从列表中删除这个存储
- git stash clear // 删除所有缓存的stash
git rebase 使用
使用场景:这个命令会让你的git分支看起来非常的整齐,会将分支合并为一条线避免出现Git历史记录因为各种切分支合并分支导致的历史线非常乱。(左图为3人开发的历史线,右图是两开发的历史线)
具体命令如下
- git checkout master // 切换到需要合并的本地分支
- git pull // 同步本地分支,拉取远程分支内容
- git checkout localBreach // 切换回修改了的本地分支(已经commit过)
- git rebase -i HEAD~2 // 合并提交 2表示合并两个 也可以直接rebase
- git rebase master // git rebase master -> 解决冲突 -> git rebase --continue
- git checkout master // 切换到需要合并的分支
- git merge localBreach // 合并分支
- git push // 推送到远程
-
git push --force origin dev // 强制将本地代码推送到远程dev分支
git cherry-pick 使用
使用场景:将代码从一个分支转移到另一个分支是常见需求,这个命令可以将任意分支中你需要的commit 拣选到你当前的分支,可以先去看看阮一峰大哥的笔记:git cherry-pick 教程 - 阮一峰的网络日志
这个目前用的少后续再更
git远程删除分支后,本地git branch -a 依然能看到怎么解决:git remote prune origin
这里只总结了部分,更详细的,更多的操作还有很多很多,git非常强大!!!