git branch -a查看仓库下所有分支
git checkout (分支)切换分支,而且是切换到的分支包含你在这个分支push但尚未被merge的东西,而且还会提示你再push一次。
git pull 如果有文件在远端分支发生的改变,而本地还是之前没改变的分支节点,那么更新结果会打印出部分文件的改变信息。但不会恢复本地自己修改掉的东西。
1,git reset –soft上次版本號(从上往下数第二份commit很长的那个字符串),只撤銷提交不撤銷本地更改的代碼(包括commit文件)(命令行:執行git log查看到上次的版本號)
補充:git reset HEAD + file(先把不想提交的文件由綠色更改為紅色狀態)
git reset –hard +上次版本號是連本地更改的代碼和commit文件一起撤銷。(不加版本号则默认恢复到下载仓库时的状态)
git log 查看当前分支上所有人的历史提交,最上面的最新
git blame filename 查看某一行代码的修改历史(其显示格式为:commitid | 代码提交作者 | 提交时间 | 代码位于文件中的行数 | 实际代码)
git show +commitid 可以展示这笔提交
git branch –contain +commitid 可以展示包含这笔提交的分支
git cherry-pick <commitId>将提交合入分支中(或用gerrit页面上的cherrypick命令),之后如果需要提交可以使用git commit –amend来将git fetch下来的东西和后来又修改的东西同时提交上去。
git clean -df&&git reset –hard HEAD^^^&&git pull来将本地的修改、提交删除并拉取得最新代码——-即相当于在最新时间节点重新下载了此仓库》
合并本地的前两次提交:
git rebase –i HEAD~2
运行完该命令,会出现如下所示内容:
使用中的危险点:
A分支添加修改不提交:
checkout到任意分支都带着这笔修改,但一旦进行过切换分支git diff就检查不到有过这笔修改,并且会在git add .时默认加上这笔修改(危险)。git clean -df(directory force)可以删除未添加到暂存区的本地修改;git reset –hard可以只删除添加到暂存区的修改,俩命令常&&一起。
A分支添加修改并提交:
checkout到其他分支将不带着这笔修改,但A分支本地会保留修改不论这笔commit是否merge(说明旧仓库不适合作为新需求的提交基础或检查代码是否合入的依据,危险)。但当你切回A分支它会提示Your branch is ahead of ‘origin/s/master’ by 1 commit.
(鉴于以上两种情况的危险性,如果不经常重新下载仓库的话,建议在修改使用git clean -df&&git reset –hard HEAD^^&&git pull来将本地的修改、提交删除并拉取最新代码),或者直接重新下载仓库)
常用经验:
一般在修改代码准备提交时,使用git commit --rebase比git commit要少增加一个新节点,对代码管理会更清晰友好,同时如果有冲突可以去修改冲突。
(假如我修改代码这个过程时间比较久,这期间有别人合入了会和我冲突的提交,为了防止我最后提上去的代码和他人冲突,应该在最后提之前git pull一下,然后解冲突再提。)和这个是一个意义吧?
如果需要在上次提交的基础上继续修改而不增加新的commit提交,可以接着修改本地然后git add . 然后git commit --amend + git push就可以了
git fetch origin 当前分支名 + git reset --hard FETCH_HEAD 可以使代码回到服务器已merge的版本(本地代码将被彻底更新)
假如想cp一笔比较多的代码提交到一个尚未合入的分支,应该cherrypick此提交到本地然后修改冲突后git add . 然后git commit再git push
(git pull --rebase和git pull都不会把刚刚在仓库提到远程的代码(未合入)消除(不会回到远程已marge的代码状态)如果本地改了代码未提,git pull --rebase会报error并且不会生效,但git pull会生效但不会清除掉本地修改的代码)