git 常用命令
配置本地库用户信息
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"
配置ssh-key 免密登录gitee仓库
# 生成ssh key
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
# 查看ssh key 公钥
cat ~/.ssh/id_rsa.pub
# 测试公钥是否添加成功
ssh -T git@gitee.com
下载代码,类似于svn的check out
git clone [url]
关联远程库相关
# 查看远程关联库地址
git remote -v
#添加关联远程库
git remote add 远程库名 远程库地址
# 删除关联远程库
git remote rm 远程库名
# 修改远程库名
git remote rename 旧远程库名 新远程库名
# 修改关联远程库地址
git remote set-url 远程库名 远程库地址
提交修改
# 将当前目录所有文件添加到git暂存区
git add .
# 提交并备注提交信息
git commit -m "log信息"
# 将本地提交推送到远程仓库
git push 远程库名(默认为origin) master
查看提交log
# 查看提交的log
git log
更新本地库代码
# 将本地代码更新到当前分支的最新,类似于svn的update
git pull
# 强制覆盖本地分支
git pull 分支名 -f
git 查看提交历史
# 查看最近3条更新日志,并且简单显示出所涉及的文件
git log -3
# 查看某一次详细提交的内容 结合上面的命令使用
git show d85760ea2780844a4f38e35e57742acead813a4e
git stash 暂存的使用
有时候我们在工作区进行开发并且不想提交的时候,这时我们又想pull
最新代码;或者又想切到另外一个分支上修改紧急bug的时候
git stash 可以暂存当前的工作区内容
可以先暂存当前的工作区的内容
git stash
等我们切到另外分支修改完了bug之后,可以切回之前分支
然后恢复之前工作区的内容继续开发
git stash pop
也可以查看stash
的Git栈信息
git stash list
当我们的stash
栈列表里面有很多,并且我们想要找到对应的版本号
并且将我们想要的版本号为stash@{2}的工作内容取出来
git stash apply stash@{2}
也可以查看版本号为stash@{2}的工作内容
git stash show stash@{2}
当我们的stash
栈列表的工作内容都应用回来的时候
可以将栈清空
git stash clear
git 分支操作
分支查询
# 查看所有分支
git branch -a
# 查看当前使用分支(结果列表中前面标*号的表示当前使用分支)
git branch
# 查看当前分支基于那个分支创建
git branch -va
结果示例:
* cutingAndMatting 0f759155 test
master e5fc2e79 --
permission 0f759155 test
remotes/origin/HEAD -> origin/master
remotes/origin/mabranch 7d71bd14 --
remotes/origin/master e5fc2e79 --
remotes/origin/permission 0f759155 test
当前分支为cutingAndMatting 基于permission分支创建,因为引用一致
分支创建
# 从当前分支 创建本地分支并切换到新建的分支
git checkout -b 分支名
例:
git checkout -b makalo
# 从远程分支 创建本地分支并切换到新建的分支
git checkout -b makalo_editor origin/makalo_editor
创建没有历史记录的空白分支
git checkout --orphan <new_branch>
git rm --cached -r .
分支重命名
#分支重命名
git branch -m oldName newName
重命名之后提交到远程分支,再删除原来的远程分支
不同主机之间不同步的问题
删除完成后,当前主机上是没有了,但是别人那里是有的
#获取被删减后的远程分支
git fetch -p
删除本地分支
git branch -d 分支名
分支切换
# 切换分支
git checkout 分支名
例:
git checkout makalo
分支删除
注意:不能删除当前分支,如果要删除当前分支,需要切换到其他分支,再删除
# 删除分支
# 删除本地分支:
git branch -d 分支名
例:
git branch -d dev
# 如果删除不了可以强制删除
git branch -D 分支名
例
git branch -D dev
# 删除远程分支(慎用)
git push origin --delete 分支名
例:
git push origin --delete dev
移除远程分支多余的部分
别人如果删除了分支,当前主机还有,就需要移除多余的远程分支
git remote prune origin
分支提交
注意:分支操作完了需要提交对应的分支中
git push 远程库名(origin) 分支名
例:
git push origin permission
远程分支覆盖本地分支
要实现这个有两种
方式一:
#先切换到master
#删除分支
git branch -d makalo_editor
# 从远程分支 创建本地分支并切换到新建的分支
git checkout -b makalo_editor origin/makalo_editor
方式二:
开发时,对于本地的项目中修改不做保存操作(或代码改崩),可以用到Git pull的强制覆盖,具体代码如下:
git fetch --all
git reset --hard origin/master
git pull //可以省略
git fetch 指令是下载远程仓库最新内容,不做合并
git reset 指令把HEAD指向master最新版本
将本地分支的指向重新设置
#取回远程库的所有修改;
git fetch --all
#指向远程库origin的develop(可更改成自己想要取的远程分支)
git reset --hard origin/develop
#把远程库拉取到本地库
git pull
分支代码更新
git pull 命用于从远程获取代码并合并本地的版本。
git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。 命令格式如下:
git pull <远程主机名> <远程分支名>:<本地分支名>
例
更新操作:
$ git pull
$ git pull origin
等同于
git pull origin master
将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
git pull origin master:brantest
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin brantest
上面命令表示,取回 origin/brantest分支,再与本地的当前分支合并
删除本地有但在远程库已经不存在的分支
先调用
git remote show origin
该命令能够获取远端分支信息,你可以看到和本地和远端不同步的地方:
过时的就是和本地不同步的分支,本地已过时的表示你需要移除这个分支了。
这个时候你需要调用
git remote prune origin
同步远程的分支到本地,这样远程已经被删除的分支,本地就不会再看见了。
分支合并
项目一般包含主干和分支,两者的合并是常用的操作。
master表示主干的名称,branch表示分支的名称。
1.主干合并分支
Git命令需要在主干下运行,命令执行后,分支的代码同步到了主干。
(1)在主干master上合并分支branch
(master) git merge branch --squash
--squash
选项的含义是:不提交、不移动HEAD,因此需要一条额外的commit命令。效果相当于将分支上的多个commit
合并成一个,放在当前分支上,原来的commit
历史则没有拿过来(前提是分支的commit历史不重要)。
(2)提交合并后的代码
(master) git commit -m "合并分支代码"
(3)将代码推送到远程仓库
(master) git push
2.分支合并主干
Git命令需要在分支下运行,执行后主干的代码同步到了分支。
(1)在分支branch上合并主干master
(branch) git merge master --squash
(2)提交合并后的代码
(branch) git commit -m "合并主干代码"
(3)将代码推送到远程仓库
(branch) git push
git 合并
当前分支合并其他分支
git merge 分支名
合并回滚
如果发现合并之后,冲突太多,想回滚合并,可以执行下面的命令
git merge --abort
git 回滚
回滚命令:
回退到上个版本
#回退到上个版本
git reset --hard HEAD^
回退到前3次提交之前
#回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard HEAD~3
退到/进到,指定commit的哈希码
#退到/进到,指定commit的哈希码(这次提交之前或之后的提交都会回滚)
git reset --hard commit_id
回滚强制提交
#回滚后提交可能会失败,必须强制提交
#强推到远程:(可能需要解决对应分支的保护状态)
git push origin HEAD --force
git 比较
git diff //查看当前修改
Git diff branch1 branch2 --stat //显示出所有有差异的文件列表
Git diff branch1 branch2 文件名(带路径) //显示指定文件的详细差异
Git diff branch1 branch2 //显示出所有有差异的文件的详细差异
git 仓库操作
更换远程仓库地址
git remote set-url origin 地址
git历史
查看commit提示修改的相关文件
git show --raw
撤销commit
修改了本地的代码,然后使用:
git commit -m '修改原因'
执行commit后,还没执行push时,想要撤销这次的commit,该怎么办?
解决方案:
使用命令:
git reset --soft HEAD^
这样就成功撤销了commit,如果想要连着add也撤销的话,--soft改为--hard(删除工作空间的改动代码)。
命令详解:
HEAD^ 表示上一个版本,即上一次的commit,也可以写成HEAD~1
如果进行两次的commit,想要都撤回,可以使用HEAD~2
--soft
不删除工作空间的改动代码 ,撤销commit,不撤销git add file
--hard
删除工作空间的改动代码,撤销commit且撤销add
另外一点,如果commit注释写错了,先要改一下注释,有其他方法也能实现,如:
git commit --amend
这时候会进入vim编辑器,修改完成你要的注释后保存即可。