赞
踩
首先看图:
为什么有个本地仓库还有一个暂存区?
git指令非常的多,下面是列举了一些仓库合作模式下经常用到的指令和这些指令常用的一些语法
有兴趣的可以看看git官方文档:https://git-scm.com/book/zh/v2
管理远端仓,origin可调整,比如设置为"公共仓",“个人仓”,等等
工作中一般初始化找个目录git clone一下,就自动给你链接好远程地址了
#修改远端仓
git remote set-url origin [url]
#添加远端仓
git remote add origin [url]
#删除远端仓
git remote rm origin
管理分支
#列出本地所有的分支,当前检出的分支后面会带*(星号),Git Bash终端会高亮显示 git branch #查看远端所有的分支 git branch -r #查看本地和远端所有的分支 git branch -a #新建本地分支(不切换到该新分支) git branch [分支名] #重命名分支名(m非强制,M强制) git branch -m|-M [旧分支名] [新分支名] #删除分支(d非强制,D强制) git branch -d|-D [分支名] #强制删除远端分支(不提交,远端仓会不生效) git branch -d -r [分支名] git push origin:[分支名]
#添加单个文件到暂存区 git add [filename] #添加多个文件到暂存区 git add file1, file2, file3 #添加指定目录文件及其子目录文件到暂存区 git add dir #添加当前目录文件及其子目录下所有新增、删除的文件到暂存区 git add . #添加修改的文件到暂存区(不会添加新建、删除的文件) git add -u #添加所有新增、修改和删除的文件。(git add .与git add -u的结合) git add -A
#提交暂存区内的所有文件
git commit -m '描述'
#自动暂存修改的文件(省略git add操作),并提交到本地仓库(只会暂存被git追踪的文件,如新增的文件,还未被追踪就不会被暂存)
git commit -a -m "描述"
#修改上一次提交的提交描述
git commit --amend -m "新的描述"
#提交指定文件,可指定多个
git commit [file1] [file2] -m "描述"
#拉取远端仓,默认拉取当前分支对应的远端仓分支
git pull
#指定origin远端仓develop分支
git pull origin develop
#指定公共远端仓master分支
git pull [公共仓url] master
#拉取所有分支的更新,但不与本地代码合并
git fetch
#更新指定origin远端仓develop分支
git fetch origin develop
#更新指定公共远端仓master分支
git fetch 公共仓 master
diff代码改动
#diff工作区和暂存区
git diff
#diff本地仓库与工作区
git diff HEAD
#diff暂存区和本地仓库
git diff --cached
#将本地仓库的feature1和feature2进行diff
#如果feature1是远程分支的话,那么就是feature2的本地仓库与远程diff
git diff [feature1] [feature2]
一般git fetch和git merge一起使用
#合并远端仓,默认合并当前分支对应的远端仓分支到本地
git merge
#合并指定origin远端仓develop分支
git merge origin develop
#拉取指定远程仓库的指定分支的更新信息
git fetch <remote> <branch>
#合并本地其他分支
git merge develop
git merge master
和merge对应的有个rebase(变基),通常不推荐使用,rebase会导致此前的提交信息丢失,为了保留此前的提交记录信息,通常使用merge
建议养成先commit再merge的好习惯,因为如果merge出错了,也能通过commit-id撤回
#推送到远端仓,默认推送当前分支对应的远端仓分支
git push
#推送到指定origin远端仓develop分支
git push origin develop
#推送到指定公共远端仓master分支
git push 公共仓 master
切换分支、撤销修改
git checkout的撤销命名尽量慎用
#新建本地分支&切换到该新分支
git checkout -b [分支名]
#以远程指定分支代码在本地新建一个分支
git checkout -b [本地分支名] origin/[远程分支名]
#切换到指定分支或指定版本号
git checkout [分支名 or 版本号]
#恢复暂存区修改或删除的文件,只能对存量文件生效,新增的文件因为没有被git追踪所以不生效
git checkout [文件名]
#强制将工作区和暂存区都恢复到指定分支或者提交记录的状态,未被git追踪的文件不会改变
git checkou -f [文件名]
回退add和commit,有以下三种策略
#默认mixed,回退到工作区 git reset #回退当前版本的暂存区 git reset --soft HEAD~ #从本地仓库直接回退到当前版本的工作区 git reset HEAD~ #撤回并清空工作区和暂存区的所有修改,如果有新增的文件会直接删除 git reset --hard HEAD~ #将本地分支重置到与指定远程分支相同的提交,并强制替换本地更改[使用之前最好git fetch一下,拉取最新改动] git reset --hard origin/qingfan #回退到上上个版本的暂存区(如果有2次commit操作,会直接将这2次commit的文件全部撤回到暂存区) git reset --soft HEAD^^ git reset --soft HEAD~2 #回退到指定提交,commit-id 可以通过 git log 查找到 git reset --soft [commit-id] #查看暂存区/工作区的代码 git status
2.12 git log
只记录commit的记录,每个提交记录包括了commit-id、提交者、提交时间、提交说明等信息
#查看提交记录 git log -n: 限制输出结果数量。例如 git log -n 5 只会显示最近的 5 条提交记录。 --author: 按照作者过滤提交记录。例如 git log --author=qingfan 只显示由 qingfan 提交的记录。 --since 和 --until: 按照时间范围过滤提交记录。例如 git log --since=2021-01-01 --until=2021-06-30 只显示在 2021 年上半年提交的记录。 --grep: 按照提交说明中包含的关键字过滤提交记录。例如 git log --grep="bug fix" 只显示提交说明中包含 "bug fix" 关键字的记录。 --pretty: 自定义输出格式。例如 git log --pretty=format:"%h %s [%an]" 只显示提交 ID、提交说明和作者名。 #退出查看 q #翻页,按键盘即可 page up page down ↑ ↓
更多命令请看git log命令全解析
查看 Git 引用日志,每个记录包含了操作的哈希值、引用名称(如 HEAD、master 等)、操作类型(如 commit、reset 等)以及操作说明
#显示当前仓库最近的操作记录列表
git reflog
按q退出
git魔法,可以选择某个提交合并到当前分支中
#将commit-id合并到当前分支
git cherry-pick [commit-id]
#将commit-id1和commit-id2合并到当前分支
git cherry-pick [commit-id1] [commit-id2]
#将feature分支的最近一次提交,合并到当前分支。
git cherry-pick feature
#将commit-id1到commit-id2及之间的所有提交记录合并到当前分支,必须确保commit-id顺序
git cherry-pick [commit-id1]..[commit-id2]
小A在本地修改了2.json文件,
准备上传远程自己的分支仓库。但是在执行push后发现报错了
从报错信息来看就是本次的提交和远程仓库的代码冲突了。因为这个文件已经被小B修改并先一步提交了(小B干坏事,往你的仓库push了代码)
这时小A需要查看本地哪些代码与远程冲突了
#1. 拉取远程最新代码
git fetch
#2. 查看diff
git diff origin/qingfan qingfan
注意:这里也可以直接使用git pull来代替git fetch+git diff。
但是不建议这么做,因为git pull会直接拉取最新代码与本地代码进行合并,最好还是先git fetch后看看哪些代码有冲突
知道了代码冲突的地方后,有2种决定:
强制提交本地代码,覆盖远程代码,这会导致远程仓库小B的修改丢失,这需要慎重操作,一定要协商好
git push -f
解冲突,商量好保留谁的代码,然后重新commit+push
#1.先merge代码,然后在本地修改冲突
git merge origin/qingfan
#2.本地解冲突
#3.提交远程
git add .
git commit -m "描述"
git push
#4.申请合码
本地修改还没有提交
#撤销工作区的修改
git checkout 文件名
#撤销工作区和暂存区的所有修改,新增的文件会被删除
git checkout -f
本地修改已经提交了,但未push
#1.先撤销commit
git reset HEAD~
#2.放弃修改,撤销工作区和暂存区的所有修改,新增的文件会被删除
git checkout -f
更暴力的,不管本地代码提交与否
#将本地分支重置到与指定远程分支相同的提交,并强制替换本地更改
git reset --hard [指定远程分支]
适用于在本地pull错了代码,或者我不想要这次pull到的最新代码,想要撤销回退到pull之前的那一次提交代码
#1.使用git log或者git reflog查看上一次提交的commit-id
git log
git reflog
#2.回退到上一次提交的代码
git reset --hard [commit-id]
tips:因为会根据commit-id来回退,所以养成在pull之前先把本地的最新改动提交到本地仓库后再pull代码,这样即使你pull错了代码也能回退,并且你本地的修改也不会丢失
#撤销所有add的文件
git reset HEAD .
#或者
git reset .
#撤销指定文件
git reset [文件名]
#回退当前版本的暂存区,只撤回了commit操作,没有撤回add
git reset --soft HEAD~
#从本地仓库直接回退到当前版本的工作区,连同add操作一起撤回了
git reset HEAD~
#撤回并清空工作区和暂存区的所有修改,如果有新增的文件会直接删除
git reset --hard HEAD~
#1.使用git log或者git reflog查看上一次提交的commit-id
git log
git reflog
#2.回退到上一次提交的代码
git reset --hard [commit-id]
想要撤销上一次push到远程自己的分支,但是还没有申请合码的代码
# 查看提交信息,获取需要回退至的版本号(commit-id)
git log
# 工作区和暂存区也会回退到某个版本(会导致你的代码丢失)
git reset --hard 版本号
# 如果不想丢失代码,只想单纯的撤销这一次push,推荐使用这种方式,会将代码撤回到暂存区,不会丢失任何数据
git reset HEAD~
# 确认是否成功撤销
git log
# 强制提交当前版本号
git push origin qingfan --force
#查看一下当前开发分支是否是自己的分支 git branch git add . git commit -m "" #拉取远程最新代码 git fetch origin #将本地最新改动与远程最新代码进行diff,大致看看哪些文件发生了改动 git diff origin/master [you-feature] #合并远程仓库最新代码,有冲突就解冲 git merge origin/master 或者 git pull origin master #解决完冲突后看看文件改动,也能确认一下是否所有冲突都解决完了 git status #有文件改动就再次add和commit #最后push上去,一般都是先push到远程自己分支在申请合码 git push origin [you-feature]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。