Git学习笔记
2019-06-28 本文已影响0人
尚无花名
这里推荐一下瘳雪峰的Git教程
Git 其实用起来不是那么简单
创建一个repo
git init #在某个文件夹下执行
创建一个新的feature branch
git checkout master
git pull --rebase
git checkout -b my_feature_branch
分成两条
git branch dev
git checkout dev
删除一个branch
git branch -d dev
其他命令
git branch //查看branch
版本穿梭
HEAD表示当前版本
HEAD^ 表示上一个版本
HEAD^^ 表示上上个版本
HEAD~100 前100个版本
git reset --hard HEAD^ 回到上一个版本
git reset --hard commit_id
检查更新
git status
git diff
git diff origin/master --name-only //只看name
git diff readme.txt 只看一个文件的更新
git diff HEAD -- readme.txt 看一个文件和head里的变化
git log 查看提交历史
git log --pretty=oneline 一行
git log --graph --pretty=oneline --abbrev-commit
git log --graph
git reflog 查看命令历史
添加文件
git add myfile // 加一个文件 到stage area
git add -A //加所有文件
git add . //加当前目录下的所有文件
git reset myfile //把这个文件从git里remove掉,但文件还在
git reset //把所有没有commit的文件从git里remove掉 ?
git commit -m "commit message"
git checkout -- readme.txt //丢弃工作区的修改 把readme.txt文件在工作区的修改全部撤销
git reset HEAD readme.txt //丢弃stage区的修改, 设为head
删除文件
rm test.text
git rm test.txt //从git中也删掉这个文件
git checkout -- test.txt 如果删错了,就这样还原
云端操作
git remote add origin https://github.com/chenbaozhen/learngit.git // 在远端加一个库,要在当前目录learngit下执行
git remote add origin git@github.com:myusername/learngit.git //在远端加一个库,要在当前目录learngit下执行
git push -u origin master
git clone https://github.com/chenbaozhen/gitskills.git //copy云端的库到本地
baozhenchen$ git remote -v //查看remote的信息
origin https://github.com/chenbaozhen/gitskills.git (fetch)
origin https://github.com/chenbaozhen/gitskills.git (push)
pull 和 fetch merge
master, origin 和origin master
master是local branch
origin是remote, 云端的意思, 代表远程库
origin/master是我在local download下来的云端master的copy
git fetch origin //从云端取回所有branch
git fetch origin master //从云端download 云端的master branch,只取master branch哦, 下载到本地后叫origin/master
git merge origin/master //把origin/master和 local 的 当前branch merge, 一般进行此操作的时候要在 master branch
在local 改变之后, 可以 把local master的push回云端
git push -u origin master //这个-u有什么作用??第一次推送master分支时加上 -u 关联本地分支和远程分支
git push origin master // 以后就不需要-u了
git push origin dev // push dev分支
git push origin :dev // 删除远端dev 分支
从去端要其他branch (非master branch)
git checkout -b dev origin/dev
Git Rebase
经常我们在merge feature branch to master的时候会发现自己本地的master已经落后remote的master了
这时需要再merge 会被拒绝。这时会需要一个rebase操作. 通俗说就是把remote master上的 code download下来,然后把自己的code加上去.
这时需要如下操作
git checkout master // checkout master
git pull origin master // 从remote端download code
git checkout feature_branch // checkout your feature branch
git rebase master // 把现在的code放在基于master上
git push origin :feature_branch //删掉remote的feature branch
git push origin feature_branch //重新上传
合并commit
当我们把自己的feature branch上传到origin/master的时候,我们在开发过程中可能有很多commit的过程,这个开发过程中的commit是给自己看的, 我们可以写了很多条commit信息。但是origin/master不需要知道这么多细节,他需要把所有这个feature的commit history合并成一个方便别人。这时就需要合并成一条。我知道有两种做法
做法1
git checkout master //转到master branch
git checkout -b feature_branch_fresh //开一个新的 并转到 这个fresh branch上
git merge --squash feature_branch // 把feature branch上的变化都变到fresh branch上
git commit -m "combined commit" // commit
git push origin feature_branch_fresh // 把fresh branch上
做法 2
git merge master 把master的新变化都放进来
git reset master // reset all your changes, keep the code but remove all commit history
git commit -a // commit once, combined
git push origin :feature_branch //删掉remote的feature branch,如果以前没上传过就可以略过这一步
git push origin feature_branch //重新上传