初始安装、添加至暂存区、提交到版本库
$ git
#查看是否安装了git
$ git config --global user.name "XXX"
$ git config --global user.email "XXX@XXX.com"
#配置全局git库的用户信息
$ git init
#当前目录下创建空的git仓库
ls -ah
#查看隐藏目录 .git版本库等
丢弃暂存区更改、丢弃工作区更改
$ git checkout -- [filename]
#或者
$ git resotre [filename]
#恢复指定文件到上一次commit或者上一次add时的状态
#该命令也可以用来恢复误删的文件
#总之,git checkout其实是用版本库里的版本替换工作区的版#本,无论工作区是修改还是删除,都可以“一键还原”。
$ git checkout HEAD [filename]
#或者
$ git restore --staged [filename]
#将文件在暂存区的修改放回到工作区内
#然后再使用git checkout -- [文件名]将工作区的修改丢弃
版本回退
$ git add -A .
#当前目录文件改动全部添加到本地库暂存区
$ git commit -m "说明信息"
#将暂存区的文件提交到本地库
$ git status
#查看仓库当前状态
$ git diff 文件名
#查看指定的文件改动
$ git log
#查看提交记录
$ git log --pretty=online
#简要的提交记录
$ git reset --hard HEAD^
#回退到上一个版本 (HEAD^^上两个版本... HEAD~100上100个版本)
如果记不清到底是前几次提交的了,可以通过reflog查看commitid,然后恢复到指定的版本
$ git reset --hard ‘版本号(不用全部,部分即可)’
#按commitid回退版本
$ git reflog
#查看命令记录,可以用来回退到之前的最新版本
连接远程仓库
#Git Base下:
$ ssh-keygen -t rsa -C "youemail@example.com"
#创建SSH Key
#本地仓库关联远程仓库
$ git remote add origin git@github.com:[you github account name]/[product name].git
#添加后 远程仓库的名字就是origin
#本地推送提交的信息到远程仓库
$ git push -u origin master
#由于远程仓库是空的,我们第一次推送master分支时,加上-u参数,git不但会把本地的master分支内容推送到远程新的master分支,还会把本地master分支和远程master分支关联起来,在以后的推送和拉取时可以简化命令
#之后将可以使用 git push 代替 git push origin master
#从远程仓库克隆项目到本地
$ git clone git@github.com:[you github account name]/[product name].git
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
分支创建、切换、合并、强制删除
$ git checkout -b [新分支名]
#创建新分支并切换
$ git branch [新分支名]
#创建分支
$ git checkout [分支名]
#切换分支
$ git branch
#查看分支信息(*代表当前分支)
$ git merge [分支名]
#合并目标分支到当前分支上
$ git branch -d [分支名]
#删除分支
######新版本支持switch操作分支
分支切换为了避免与checkout关键字其他功能混淆,可以使用switch代替checkout
$ git switch -c [新分支名]
#创建并切换分支
$ git switch [分支名]
直接切换到已有分支
使用新的git switch命令,比checkout要更容易理解
$ git log --graph --pretty=oneline --abbrev-commit
查看分支合并情况
$ git merge --no-ff -m "提交信息" [分支]
#合并分支并创建一次提交记录,可在提交记录上查看到merge信息
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
########
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
远程分支
$ git branch -a
#查看远程分支列表
#如果查看不到想要分支,试试
$ git pull
#再
$ git branch -a
#删除远程分支
git push origin --delete <branchName>
临时存储工作区变更、批量分支更改
$ git stash
#将当前工作区的工作现场记录下来,便于切换分支,并且可以随时将其恢复
$ git stash list
#查看stash记录列表
$ git stash pop
#恢复stash中的最新记录并删除掉该记录
$ git stash apply
#恢复stash中的最新记录,但不删除该记录
$ git stash apply/pop [记录的标题,例如stash@{0}]
#恢复指定的记录
#######
如果两个分支中含有相同的bug,修复了其中一个并提交之后,需要将这次改动复制到另一个分支上
需要使用cherry-pick命令
$ git cherry-pick [提交时的id]
小结
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
分支远程推送、提交时冲突解决
推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
#将本地master分支推送到远程上
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
#######
push推送时出现问题时,需要先将代码pull下来,解决冲突后再push上去
当直接使用$ git pull时去拉代码时,会报错
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
解决办法一种是提供详细分支参数
$ git pull <remote> <branch>
#或者将当前分支关联到远程分支
$ git branch --set-upstream-to=origin/<branch> dev
#指定本地dev分支与远程origin/dev分支的链接
$ git branch --set-upstream-to=origin/dev dev
将持续更新…