本文是对经常使用git操做作一个总结,后续也会同步到个人我的网站。git
$ git config --global user.email "your email" $ git config –-global user.name "your name"
$ ls -al ~/.ssh
id_rsa 是私钥,id_rsa.pub 是公钥
id_rsa.pub 是你须要上传到 github 的 SSH KEYgithub
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
$ git clone "your repo"
1. 新建文件夹 $ mkdir test 2. 初始化 git $ git init 3. 移除原有的 origin $ git remote rm origin 4. 添加你的远程库(SSH地址) $ git remote add origin "your remote repo" 5. 更新本地库 $ git pull 6. 首次推送与远程库创建关联,之后直接 git push 就能够 $ git push --set-upstream origin master
查看当前所在分支 $ git branch 查看全部分支 $ git branch -a 查看远程库信息 $ git remote -v 新建分支 $ git branch "new branch" 切换分支 $ git checkout "target branch" 新建并切换到新分支 $ git checkout -b "new branch" 新建分支并和远程分支进行关联 $ git checkout -b "new branch" origin/"new branch" 合并分支到当前所处分支上 $ git merge "your branch" 删除分支 $ git branch -d "your branch" 强制删除未 commit 的分支 $ git branch -D "your branch"
查看当前工做区状态 $ git status 添加单个文件到暂存区 $ git add xxx.txt 一次性添加全部改动文件 $ git add . 提交文件到本地版本库 $ git commit -m "I add a file." 推送本地更新到远程版本库 $ git push 本地库关联远程库 $ git push --set-upstream origin master
工做区和暂存区之间差别对比 $ git diff "xxx.txt" 暂存区和版本库之间差别对比 $ git diff --cached(--staged) "xxx.txt" 工做区和版本库之间差别对比 $ git diff master
$ git log
HEAD 是最新版本,HEAD^ 是上一个版本 $ git reset --hard HEAD^ 回退到指定id,git log 查看版本id,版本id不用所有输入,取头几位就能够 $ git reset –hard cb926e7e
使用版本库中的文件或者暂存区中的文件替换工做区的文件 让文件回到最近一次 git commit 或 git add 时的状态 $ git checkout -- "xxx.txt"
删除工做区中的文件 $ rm "xxx.txt" 提交删除操做到暂存区 $ git rm "xxx.txt" 提交删除到版本库,在版本库中完全删除文件 $ git commit -m "remove file"
在实际开发中,咱们应该按照几个基本原则进行分支管理:
服务器
因此,团队合做的分支看起来就像这样:微信
修复bug时,咱们会经过建立新的bug分支进行修复,而后合并,最后删除;
当手头工做没有完成时,先把工做现场git stash一下,而后去修复bug,修复后,再git stash pop,回到工做现场app
储存工做现场 $ git stash 工做现场列表 $ git stash list 恢复但不删除储藏栈的工做现场 $ git stash apply 恢复并删除储藏栈中的工做现场 $ git stash pop
在 git 工做区根目录下建立 .gitignore 文件,把要忽略的文件名写进去,git 就会自动忽略这些文件ssh
给 status 建立别名 st $ git config --global alias.st status
配置文件放在 ~/.gitconfigfetch
要讲清楚这两个命令的区别,就须要从git clone开始讲起
假设你在github上有一个远程仓库地址是xxx,而后你从远程仓库clone到本地仓库网站
$ git clone xxx
执行完此命令后,Git会自动为你将远程仓库命名为origin,并下载其中全部的数据到本地,在本地创建全部远程存在的分支,而且命名为origin/xxx,例如远程分支有master、developer,那么本地就会创建origin/master分支、origin/developer分支,而且它们都是处于remotes目录下,是隐藏的。使用命令git branch -a就能够看到隐藏目录remotes,结果显示为remotes/origin/master以及remotes/origin/developer。接着,Git会继续创建一个属于你的本地master和developer分支,位置和远程origin/master、origin/developer分支处于相同的位置,你就能够开始工做了。
这样,咱们在本地仓库的本地分支和远程分支就都有了,而且始于同一位置。url
若是其余人向github上xxx推送了他们的更新,那么服务器上的相应分支就会向前推动。若是在本地的相应分支进行了commit提交到本地代码库,那么本地的master或者developer分支也会向前推动,不过只要你不和服务器通讯数据,那么本地的remotes/origin/master(developer)指针仍然会在原地不动。spa
注意这里的本地分支master已经前移,服务器上的master分支也已经前移,因此能够说本地的remotes/origin/master是过期的。
$ git fetch origin
运行git fetch origin命令后,会同步远程服务器上的数据到本地,该命令首先找到origin是哪一个服务器,从上面获取你不曾拥有的数据,更新到你的本地remotes/origin/master(developer),而后把remotes/origin/master(developer)的指针移动到最新的位置上:
这就是git fetch origin的做用
比较本地 master 分支和 origin/master 分支有什么区别 $ git log master..origin/master 切换到本地 master 分支下 $ git checkout master 合并 origin/master 分支到本地 master 分支 $ git merge origin master
这就是 git pull 和 git fetch 的区别
删除未跟踪文件 $ git clean -f 删除未跟踪文件目录 $ git clean -fd 正式删除文件之前先查看哪些会被删除 $ git clean -nf $ git clean -nfd
$ git fetch -p origin
$ git branch -m old-local-branch-name new-local-branch-name
$ git push origin :old-remote-branch-name
切换到本地分支 $ git checkout local-branch push 到想要创建关联的远程分支 $ git push -u origin/remote-branch
先删除远程文件 $ git remote rm origin 跟踪新远程文件 $ git remote add origin https://xxx.git 或者合并成一条命令 $ git remote origin set-url https://xxx.git