git使用整理

the stupid content tracker

git是一个分布式的版本控制系统,是由伟大的程序员Linus开发而成。git的本意是饭桶,无用的人,烂人。

I’m an egotistical bastard, so I name all my projects after myself. First Linux, now git.

与传统的集中式版本控制系统相比,两者的区别是:集中式版本控制系统提取的是最新版本的文件快照;而分布式版本控制系统是把代码仓库完整地镜像下来。分布式的好处是任一机器发生故障,都能从其他任何一个镜像出来的本地仓库恢复。

犯的一些错误
  • 提交代码的时候,有冲突,在没有弄清楚的情况下覆盖了别人的代码。
    由于写的时候不是最新的代码,所以改动之后提交,发生了冲突,然后在没有和同事沟通的情况下,擅自解决冲突然后把别人的代码给覆盖了.
    解决方法:
    有新的小特性或者临时的Bug修复时的改动的时候最好是切一个新分支,或者hotfix分支,然后把最新的代码copy下来再改动,而不是在随便选一个过时的代码分支改动。
git的优点
  • 速度

  • 简单的设计

  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)

  • 完全分布式

  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

git基本操作

在安装好git后,我们就能愉快地使用这个强大的工具啦~

帮助
git help <verb>
初始化仓库
git init
克隆
git clone [url]
忽略文件

支持glob模式正则匹配

cat .gitignore

要养成一开始设置好gitignore的习惯,避免提交无用的文件

检查当前文件状态
git status -s
跟踪新文件

将修改的文件从工作目录添加到本地暂存区

git add file
比较当前工作目录的文件和暂存区的差异
//更新尚未暂存的内容
git diff
//暂存暂未提交的内容
git diff --cached | --staged
//查看当前系统支持哪些Git Diff 的插件版本
git difftool --tool-help

提交更新
git commit -m 'added new benchmarks'
跳过使用暂存区域提交
git commit -a -m 'added new benchmarks'
移除文件
//移除尚未暂存的本地文件
git rm README
//移除已经暂存的文件,并连带本地文件一起删除
git rm -f README
//移除暂存区的文件,但是保留在工作目录中
git rm --cached log/\*.log
移动文件(重命名)
git mv README.md README
查看提交历史
git log
重新提交
//第二次提交将代替第一次提交
git commit -m 'initial commit'
git add forgotten_file
git commit --amend

取消暂存
git reset HEAD README.md
撤销对文件的修改

会将文件还原成最初的样子

git checkout -- [file]

PS:git中任何已提交的东西几乎都是可以恢复的,而未提交的东西丢失后很可能再也找不到了。

查看所有远程仓库

如果是git clone克隆下来的仓库默认名称为origin

git remote -v
查看某一个远程仓库
git remote show [remote-name]
添加远程仓库
git remote add <shortname> <url>
从远程仓库拉取数据

git fetch数据拉到本地仓库,但不会自动合并或修改当前的工作,当准备好时必须手动将其合并入你的工作。

git fetch [remote-name]

如果你有一个分支设置为跟踪一个远程分支(默认git clone会将本地master分支跟踪远程仓库的master分支),git pull会拉取远程仓库的数据并自动尝试合并到当前所在的分支

git pull
推送到远程仓库

pull request (PR)

只有当有远程服务器的写入权限,并且之前没有人推送过时,这条命令才会生效。如果你和其他人同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会被拒绝。必须先将他人的工作拉取下来并将其合并进的的工作之后才能推送。

git push [romete-name] [branch-name]

远程仓库的移除与重命名
git remote rename pb paul
git remote rm paul
打标签
git tag //列出标签
git tag -l 'tagname' //列出指定标签
git tag -a v1.4 -m 'my version 1.4' //创建标签1.4
git show v1.4 //查看标签的提交信息
git log --pretty=oneline
git tag -a v1.2 9fceb01 //后期打标签,找到log里的每次提交的校验和
git push origin v1.4 //将标签推送到共享服务器上
git push origin tags //将所有不在远程服务器上的标签都推送上去
git checkout -b version1.4 v1.4 //对特定的标签创建一个新分支
git分支

Git的杀手级特性:分支模型。分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。理解和精通这一特性,你便会意识到git是如此的强大而又独特,从此真正地改变你的开发方式。

git branch test //创建分支test
git checkout test //分支切换

git checkout master
git merge test //合并master和test分支
git branch -d test //删除分支
git branch //列出当前所有分支
git branch -v //列出每一个分支的最后一次提交
git branch --merged/--no-merged //查看哪些分支已合并到/未合并到当前分支

分支开发工作流:

  • 长期分支:对于复杂庞大的项目,一般在master分支上保留完全安全稳定的代码(有可能是已经发布或者即将发布的代码)。还有一些名为develop或者next的平行分支,被用来做后续持续开发或者测试你稳定性,这些分支不必保持绝对稳定,但是一旦达到稳定状态就可以被合并入master分支了。
  • 特性分支:对于任何项目规模都适用。特性分支是一种短期分支,它被用来实现单一特性或者相关工作。

利用远程跟踪分支

git remote show origin //获取远程分支的更多信息
git push origin serverfix:awesomebranch //将本地的serverfix推送到远程仓库中awesomebranch仓库中
git fetch origin //抓取新的远程跟踪分支时,只有一个不可修改的origin/awesomebranch的
git merge origin/awesomebranch //将awesomebranch分支中的工作合并到当前所在的分支
git checkout -b serverfix origin/awesomebranch //检出远程分支生成一个用于工作的本地分支
git checkout --track origin/awesomebranch //上面的快捷方式
git branch -u/--set-upstream-to origin/awesomebranch //修改正在跟踪的上游分支
git branch -vv //查看设置的所有跟踪分支 
git fetch --all;git branch -vv //查看最新的领先与落后数字
git pull //相当于git fetch;git merge 最好显示地使用fetch和merge命令好一些
git push origin --delete awesomebranch //删除远程分支

变基(rebase):
可以使用rebase命令将提交到某一分支的所有修改都迁移到另一分支上。使用变基使得提交历史更加简洁。但是,不要对你的仓库外有副本的分支执行变基。

git checkout experiment 
git rebase master //将experiment分支的修改应用到master分支上
git checkout master 
git merge experiment //此时是fast-forward合并

储藏与清理

当在某个分支上做了修改又不想提交的时候,可以将更改的储藏推送到栈上。

git stash //提交储藏
git statsh list //查看已经储藏的列表
git stash apply xxx //将储藏应用
git stash apply --index // ???
git stash drop xxx //移除储藏
git stash pop //应用储藏并立即从栈上扔掉它
git stash --keep-index //不要储藏git add的东西
git stash -u //储藏跟踪和未跟踪的文件
git stash --patch //交互式地提示哪些改动想要储藏,哪些改动需要保存在工作目录中

凭证存储

如何避免每次推送的时候输入用户名和密码?

设置多个账号

参考:
http://www.cnblogs.com/tinyphp/p/5025311.html

https://www.jianshu.com/p/89cb26e5c3e8

参考

Github给世界带来了什么改变?

https://git-scm.com/docs

https://git-scm.com/book/zh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值