git stash 暂存当前正在进行的工作
比如想pull 最新代码, 又不想加新commit, 或者为了fix 一个紧急的bug, 先stash, 使返回到自己上一个commit, 改完bug之后再stash pop, 继续原来的工作,或者希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull #or do something else
git stash pop
git stash apply 应用某次stash的内容
git stash apply stash@{n}
前面我们知道了git stash和git stash pop的用法,但是可能我们由于切换了不同的分支,执行了多次git stash操作,我们想回到之前某次stash的状态,这时可以使用git stash apply 指令,在执行git stash apply之前可能我们忘记了是回到哪一次状态,可以通过
git stash list
例如我们想回到之前倒数第三次stash的状态,可以执行如下指令
git stash apply stash@{2}
git checkout 切换分支
git checkout branch
有时由于本地修改了某些配置,或者修改了某些文件,无法直接切换branch, 则可以利用git stash,如下:
git stash
git checkout branch
git checkout -b 从已有的分支创建新的分支
如从master分支,创建一个dev分支
git checkout -b dev
创建完可以查看一下,分支已经切换到dev
git branch
输出* dev
master
把新建的分支push到远端
git push origin dev
拉取远端分支
git pull
输出
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
经过验证,当前的分支并没有和本地分支关联,根据提示进行下一步:
关联,建立本地到上游(远端)仓的链接 –这样代码才能提交上去
git branch --set-upstream-to=origin/dev
再次拉取 验证
git pull
git cherry-pick 遴选
遴选即把已经提交的commit, 从一个分支放到另一个分支
git cherry-pick
例如,在master分支上做了一个commit ( 91e567e71ff5ae6bacb6b9e8e83a49bb8918c4dc [91e567e] ) , 如何把它放到本地refactor分支上
首先切换到refactor
git checkout refactor
然后使用git cherry-pick <commit id>
将该提交放到本地refactor分支上
git cherry-pick 91e567e
如果顺利则正常提交
如果在cherry-pick的过程中出现了冲突,与处理普通冲突一样,先处理冲突,再提交。
处理冲突的过程,下一节详细讲如何解决文件冲突:
git status # 看哪些文件出现冲突
both modified: app/models/user.rb
vim app/models/user.rb # 手动解决它。
git add app/models/user.rb
git commit -c <新的commit号码>
文件冲突
直接用命令行的同学可以通过git status
查看哪些文件出现冲突,然后修改冲突文件,再重新git add该文件
git add path/filename
即可继续commit
git commit -c <新的commit号码>
用eclipse的同学可以右键有冲突标记的文件,选Git->Git Add to Git index->commit
用SourceTree选中冲突文件,右键标记冲突已解决即可正常提交了。
SourceTree
这里推荐一款图形化界面工具SourceTree,工作中常用这个软件,利用SourceTree+命令行的方式也能轻松的解决遇到的大多数问题。自认为并不是什么Git达人,各种指令也常常记不住,虽然通常图形化工具有其局限性,但SourceTree同时也提供命令行的方式,所以通常一般情况我都用图形化界面解决,方便快捷,不用记住太多指令,实在没招就用SourceTree的命令行来解决。
命令行模式按钮在如图红框的地方
错误提示:fatal: remote origin already exists
解决办法如下:
输入
git remote rm origin
git remote add origin git@github.com:djqiang/gitdemo.git