log命令
git log –pretty=oneline //精简版显示log
git log –graph//显示合并分支图
git log –graph –pretty=oneline –abbrev-commit //显示精简版合并分支图
本地回退总结(工作区,stage区,commit后)
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout — file(checkout命令是用版本库文件替换工作区文件)。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,直接回退一次命令git reset –hard HEAD^
场景4:已经提交了不合适的修改到版本库时,想要撤销本次提交,直接回退多次后发现回退过了,就需找到commit id回退到指定的commit,通过命令git log 找到想回退的commit id(电脑重启用git reflog), 再命令git reset –hard f80150a2c356768825f14e105e019eb1673d31d5
本地删除总结
场景1:工作区误删文件想找回,参考回退场景1,git checkout –file(checkout命令是用版本库文件替换工作区文件)
场景2:彻底删除,工作区删除文件后,命令git rm file(对比git add,都是把改动放到stage区),再提交这次改动(删除), 命令git commit -m “rm file”
branch常用命令
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
stash命令
git stash//添加stash
git stash list//查看stash
git stash apply//应用stash但并不删除stash
git stash drop//删除stash
git stash pop//应用stash且删除stash (=git stash apply + git stash drop+
tag命令
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m “blablabla…”可以指定标签信息;
git tag -s <tagname> -m “blablabla…”可以用PGP签名标签;
命令git tag可以查看所有标签。
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin –tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
Merge
1.Fast forward 没分叉Merge
3.三方合并,两个分支都进行了改变,合并会把共有节点,Branch1改变,Branch2改变三方合并成一个新的commit
Rebase
假设有master分支,dev1分支,实际生产环境中master不断在变,dev1也不断在变,当合并dev1到master之前,应该先进行一次rebase,让dev1补上master的改变,详细的来说举个例子:
master提交了N次,Head向前N次commit(别的同事合并的),同时dev1提交一次,Head向前一次commit(我自己开发分支),现在我想合并代码到master了,在dev1分支这么搞
1.先执行命令 git rebase master
这个命令干了这些事儿:
- 把dev1到和master共同节点之间的所有提交暂存起来,图中C4
- 把master最新Head到和dev1共同节点之间的所有提交合并到Dev1(fast forward dev1合并相当于,因为dev1暂存了改变,是和master共同节点状态),图中C3
- 把暂存的dev1提交接着fast forward合并到dev1,图中C4
2.切换到master分支,执行git merge dev1
这时候相当于dev1已经补全了master后来其他同事提交的代码,再合并
Rebase只是对dev1自己工作目录操作,不要尝试对公共分支使用