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 fetchgit 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编辑器,修改完成你要的注释后保存即可。

posted @ 2020-04-07 10:37  makalo  阅读(209)  评论(0编辑  收藏  举报