git命令 学习总结
远程仓库通常只是一个_裸仓库(bare repository) 即一个没有当前工作目录的仓库。因为该仓库只是一个合作媒介,所以不需要从硬盘上取出最新版本的快照;仓库里存放的仅仅是 Git 的数据。简单地说,裸仓库就是你工作目录中 .git 子目录内的内容。
配置
git config --global user.name lutao 用户名
git config --global user.email tao.lu@mixiu.cn 邮箱
git config --global color.ui always/true 颜色提示
git --bare init testproj 创建裸仓库并初始化
git push /data/git/ming.ma/student/ master:master 提交到远程裸仓库
mkdir MyProject 创建目录
cd MyProject
git init 开始使用git
创建文件
touch README
保存到暂存区
git add README
查看状态
git status
修改文件
echo “readme” > README
再保存到暂存区
git add README
查看修改内容,显示索引区与git仓库之间的差异(已保存到暂存区的,即:Changes to be committed:)
git diff –-cached
查看修改内容, 显示工作目录与索引区文件之间的差异(未保存到暂存区的,即:Changed but not updated:)
git diff
git diff HEAD 显示工作目录与git仓库之间的差异(commit 之后)
git diff HEAD^ 比较上次提交
git diff HEAD~2 比较上2次提交
--name-only 只查看文件名
--stat=width 设置文件名的宽度显示
git diff commit1 commit2 将2次提交的内容进行对比
等价于
git diff commit1..commit2 如果省略任意一个commit,默认将使用HEAD代替
commit可以是简写的commit哈希值,也可是是HEAD。
HEAD代表最后一次提交,HEAD^代表最后一次提交的父提交,HEAD~1>等价于HEAD^,HEAD~2为倒数第二次提交,以此类推。
结果显示:
@@ -1,2 +1,2 @@
1,2表示从第1行起修改了2行
-表示修改前的
+表示修改后的
@@ -5,16 +11,10 @@
从第5行开始的16行内容 和 从11行开始的10行内容
提交,-m 附加提交信息
git commit -m “Inital commit” (-a 提交所有改变的文件)
查看全部提交信息
git log
显示版本历史以及版本间的内容差异
git log -p
只显示最近几个提交
git log -n
一行显示(简略)
git log --oneline
修改提交信息
git commit --amend
git commit -C HEAD -a --amend 补增提交,不会产生新的提交记录
-c 可以修改提交信息
删除已保存到暂存区的
git rm -rf
删除未保存到暂存区的(修改区)
rm -rf
移动/修改名字
git mv
暂存区转到修改区(恢复暂存区快照git reset HEAD + (上一次commit)哈希串前6位)
git reset HEAD
reset命令有3种方式:
git reset -–mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息(add之前)
git reset -–soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可(commit之前)
撤销提交
git reset --soft HEAD^
git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
已修改转到未修改(恢复修改区的本地文件)
git checkout
创建分支 + 转到我的分支 = 创建分支并转到我的分支
git branch my_branch git checkout my_branch git checkout -b my_branch
查看分支 git branch 查看远程分支 git branch -r
转到默认(master)分支 git checkout master
删除我的分支 git branch -d my_branch (-D 强制删除)
git merge my_branch 合并分支
git merge -v 可以看到最后一次提交日志
git --merged或 git --no-merged 来查看分支是否已经合并完成。
git rebase 衍合--->将一个分支的改变加到另一个分支(Push过的分支绝对不要rebase!)
有冲突,处理好了,可以运行git rebase --continue继续直到完成
放弃rebase过程(运行git rebase --abort),直接用test分支的取代当前分支的(git rebase --skip)。
git clone git://github.com/schacon/ticgit.git 克隆一个已经存在的远程git仓库
git clone /data/git -b newmaster 克隆指定分支(默认master)
git remote 查看远程仓库(-v 查看克隆地址)
git remote add pb git://github.com/paulboone/ticgit.git 添加远程仓库==》git fetch pb
git fetch git clone git pull 区别:
git fetch是在本地已有的git仓库基础上抓取
git clone是把远端的git仓库克隆到本地,(本地原本不存在git仓库)
git pull = git fetch + git merge
git pull 远程地址 远程分支:本地分支
或git pull origin 远程分支:本地分支
git log --graph 查看图形化记录
git push origin master:new_master 上传
git push origin :new_master 删除远程分支
git gc 垃圾收集
git stash
当你不想提交当前完成了一半的代码,但是却不得不修改一个紧急Bug,那么使用’git stash’就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用’git stash apply’将以前一半的工作应用回来。
当你多次使用’git stash’命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑,’git stash list’命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用’git stash apply stash@{1}’就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用’git stash clear’来将栈清空