git常用操作

136 阅读3分钟

1,git基础操作

//克隆项目
git clone <项目地址>

//查看所有分支
git branch -a

//切换分支
git checkout <分支名>

//创建并切换分支
git checkout -b <分支名>

//创建并同步远程分支到本地
git checkout -b <分支名> origin/<分支名>

//拉取远端分支代码
git pull origin <分支名>

//把文件保存到暂存区
git add .

//将暂存区内容提交到本地版本库
git commit -m '提交备注信息'

//重新提交备注信息
git commit --amend

//推送本地内容到远端分支
git push origin <分支名>

//查看当前提交状态
git status

//查看commit记录
git log --oneline

//删除本地分支
git branch -d <分支名>

//删除远端分支
git push origin -d <分支名>

2,git中解决冲突

  • 如果修改了本地分支代码并提交本地版本库后,没有拉取最新远端代码就git push会报错

解决:

1, git pull origin <分支名> 拉取远端最新代码
2, 全局搜索>>>,找到冲突的模块,处理冲突
3, git add .
4, git commit -m '备注'
5, git push origin <分支名> 推送本地修改到远端分支
  • 如果修改本地分支代码,未保存到暂存区和本地代码库就拉取远端代码,会报错如下:

解决:

1, git add .
2, git commit -m '备注'
3, git pull origin <分支名> 拉取远端最新代码(如果有冲突需要4567步骤,如果没有冲突,直接第7步)
4, 全局搜索>>>,找到冲突的模块,处理冲突
5, git add .
6, git commit -m '备注'
7, git push origin <分支名> 推送本地修改到远端分支

3,git中vim编辑

git commit 如果没有-m提交备注信息会报错如下:

如果遇到这种情况不要慌,此时是vim编辑器,按下面操作即可:

  • (1)在任意地方输入i,vim 即可进入编辑状态

  • (2) 编辑完后,按ESC退出编辑状态

  • (3) 输入小写冒号:wq,表示保存文件并退出vim 此时完成了commit的备注

4,git中合并多个commit

  • (1) git rebase
git rebase -i <commit的SHA-1值>(指名要合并的版本之前的最后一个版本号,注意和并不包含这个版本)
或者
git rebase -i HEAD~<合并commit的个数>

上图合并rebase1\rebase2\rebase3时可以用一下两种方式
git rebase -i 62cf1bc
或者
git rebase -i HEAD~3
  • (2) 选取要合并的提交 注意需要保留的commit前面的pick保持不变,把需要合并的commit前的pick改成's'或者'squash', git会把前面为 'squash'的 commit 记录与它的上一条记录合并为一条。
    修改完后按esc退出编辑状态
    输入:wq保存并退出

  • (3) 修改commit备注信息

-(4)完成修改,只会保留被pick的commit

注意至少保留一个pick,否则会报错: 可以选择git rebase --abort中断并重新开始rebase

  • (5) 提交 如果是本地仓库commit,可以git push 继续接下来的操作
    如果是远程代码库中的代码,可以通过git push -f 强制推送

5.版本回退

git reset --hard HEAD^^  回到上个版本(一个^表示回退一次,有几个表示回退几次,HEAD^表示当前版本,HEAD^^表示上一次commit)
git reset --hard HEAD~100  回退100次版本(HEAD~1表示当前commit,HEAD~2表示上一次commit)
git reset --hard <commit的SHA-1值> 表示回退到具体某个commit版本

6.暂存

//存储已跟踪文件的改动和暂存区的内容,注意:未被跟踪的文件不会被暂存
git stash  
或者
git stash save '备注信息'

//查看所有的暂存
git list 

// 使用暂存
git stash apply stash名字 //取出后栈内还保存当前存储记录,下次可以再次取出当前存储,如git stash apply stash@{0} 
git stash pop stash名字 // 取出后,栈内便删除当前存储记录,可以理解为数组的pop方法,如git stash pop stash@{0} 

// 移除存储记录
git stash drop 存储记录的名字 //即git stash list每条记录开头显示的名字,如:git stash drop stash@{0} 

// 暂存除了暂存区以外的改动
git stash save --keep-index

持续更新。。。