git 常用命令笔记(随时更新)

291 阅读5分钟

git 分支操作

删除本地分支: git branch -D master

删除远程分支: git push origin --delete [branchname]

查看本地分支: git branch

查看当前 git 的远程仓库地址: git remote -v

git 拉取指定的远程分支(两种方式)

直接拉取

git clone -b dev git@xxxxxx.git

git clone -b 远程分支名 仓库地址

本地已经有相关的仓库代码

1.查看远程分支 git branch -r

2.创建本地分支并关联 git checkout -b 本地分支 origin/远程分支

3.已有本地分支创建关联 git branch --set-upstream-to origin/远程分支名 本地分支名

4.拉取 git pull

拉取某分支并创建本地对应分支

1.获取远程分支: git pull origin <远程分支名>

2.基于远程分支创建本地分支: git checkout -b <本地分支名> origin/<远程分支名>

git stash 用法总结

(1)git stash save "save message"  : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

(2)git stash list  :查看stash了哪些存储

(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show  stash@{$num}  -p ,比如第二个:git stash show  stash@{1}  -p

(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} 

(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

(7)git stash drop stash@{num} :丢弃stash@{num}存储,从列表中删除这个存储

(8)git stash clear :删除所有缓存的stash

新增的文件,直接执行stash是不会被存储的, 先执行下git add 加到git版本控制中,然后再git stash就可以了

git tag 使用

列出所有标签: git tag

创建附注标签: git tag -a v1.4 -m "my version 1.4"

显示标签以及附注信息: git show v1.4

创建轻量标签: git tag v1.4

共享标签(推送标签到远程分支): git push origin v1.5

删除本地标签: git tag -d v1.4

删除远程标签: git push origin --delete v1.4

git 撤销更改

1.查找对应的commit_id git log

WeChatd47ba79c2d70947a91ffba13c5634842.png

2.1. 第一种情况:还没有push,只是在本地commit

git reset --soft|--mixed|--hard <commit_id> 
git push develop develop --force (本地分支和远程分支都是 develop)

–mixed 修改本地仓库、暂存区里面的数据为commitId对应快照里的数据,是git reset默认的参数,–mixed可缺省。 暂存区的数据会被快照中的数据覆盖
–soft 修改本地仓库里面的数据为commitId对应快照的数据。(仅改变指向快照的指针指向)
–hard 修改本地仓库、暂存区、工作区里面的数据为commitId对应快照的内数据

当push代码以后,又用 reset --hard <commit…> 回退代码到某个版本之前,但是这样会有一个问题,你线上的代码没有变,线上commit,index都没有变,当你把本地代码修改完提交的时候你会发现全是冲突…这时换下一种。

2.2.commit push 代码已经更新到远程仓库

对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致,你要用到下面的命令

git revert <commit_id>

revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新。
注意:git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit,看似达到的效果是一样的,其实完全不同

区别: 第一:上面我们说的如果你已经push到线上代码库,reset 删除指定commit以后,你git push可能导致一大堆冲突,但是revert 并不会。
第二:如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里。但是revert 方向提交的commit 并不会出现在历史分支里。
第三:reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的。

1043841646820770_.pic_hd.jpg

1043851646820785_.pic_hd.jpg

you need to resolve your current index first 解决办法

问题原因: merge失败,有conflicts没解决,可以:

1、解决conflicts后再次执行merge;

2、回退到merge前 git reset --merge

打开git配置:

open ~/.gitconfig

将某次commit从一个分支转移到另一个分支

应用场景:多个分支并行开发的情况下,将某次commit提交错分支了,那么就需要从 A 分支将某次 commit转移到B分支

前提:提交错误的分支为A,希望提交到的分支为B

1、首先切换到A分支

git checkout A

2、查询错误commit的ID,并拷贝出来

git log  

假如:id是 b41b8aa5926cc102b8503aefd09530ebe435855f

3、然后切换到B分支

 git checkout B

4、将该commit id pick到正确分支

 git cherry-pick b41b8aa5926cc102b8503aefd09530ebe435855f

然后再 git log,可以看到这个分支上已经有这个commit了,但是commit id却变了,所以这是copy,而不是move,那么原来的还一定存在

5、再切换到A分支

    git checkout A
    git log

发现原来错误的 commit id 还是存在的,这时候把这个commit 再去掉

6、去掉错误的commit

如果这个commit是最新的提交,那么可以使用

git reset --hard b41b8aa5926cc102b8503aefd09530ebe435855f

如果这个commit id是中间的某次commit,那么使用git revert去回退即可,美中不足的是会增加一条记录

7、每个分支分别push

B分支上是新增 commit,可以直接 git push A分支上如果使用了 git reset 回退的,需要git push -f ,如果是git revert的可以直接git push