Workspace:工作区
Index / Stage:暂存区/缓冲区
Repository:仓库区(或本地仓库)
Remote:远程仓库
1.配置:
$ git config --global user.name "rui"
$ git config --global user.email "guangruiw@163.com"
2. git 基本命令
$ git clone <repo> //从git 仓库拉取代码
$ git status //查看当前目录,提交之后是否有新的修改
$ git add <filename> //添加到缓冲区, -u将tarck到的全部添加到缓冲区
$ git diff // 查看执行给git status 的结果的详细信息,尚未缓存的改动, --cached 查看已缓存的改动,-- stat :显示摘要
$ git diff <filename> //产看文件的具体 改动
$ git diff HEAD //查看本地工作区和版本库之间的差异
$ git diff HEAD^ //查看本地工作区和上一个版本之间的差异
$ git commit -m "message" //将缓冲区添加到本地仓库中,并添加注释
$ git commit -a // 提交所有改变的内容,直接到仓库区
$ git commit -v //提交时显示所有diff信息
$ git commit --amend -m [message] //使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend [file1] [file2] ... //重做上一次commit,并包括指定文件的新变化
$ git rm <file> //删除文件
$ git rm -f <file> //删除之前已经修改并且放到缓冲区,需要强制的删除
$ git rm --cached <file> //只删除缓冲区文件,仍保留在当前的工作目录中
$ git mv <sourchfile> <targetfile> //移动或重命名文件,目录,软连接
$ git tag -a v1.0 //创建一个带注解的标签
3. git 分支管理
$ git branch //列出分支
$ git branch <branchname> //创建分支
$ git branch -r //查看远程分支
$ git branch -a //查看本地和远程的所有分支\
$ git checkout <branchname> //切换分支
$ git checkout -b <branchname> //创建分支并立即切换到该分支下面
$ git branch -d <branchname> //删除分支
$ git checkout –b dev origin/dev //创建本地dev分支并将远程的origin的dev分支到本地来,
$ git merge <branchname> //将branchname分支合并到当前分支下面(当前分支认可合并所有分支的所有修改,合并冲突时,需要手动修改冲突文件,然后再用git add 和 git commit
$ git stash //隐藏当前的工作现场(等待恢复后继续任务),执行该命令后(git status 命令查看是没有任何的改动的)可以创建其他分支用于进行其他的任务
$ git stash list //查看git stash隐藏的工作现场
$ git stash apply //恢复后,stash内容并不删除,你需要使用命令git stash drop来删除。
$ git stash pop //恢复的同时把stash内容也删除了。
4. git版本控制
$ git log //最新修改在最前面
$ git log --oneline //查看历史记录的简洁版本
$ git log --graph //查看历史记录
$ git log --reverse //逆向显示所有日志
$ git log --author=rui //查看指定用户提交的日志
$ git reset --hard HEAD^ //返回到上一个版本,回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推
$ git reset --hard HEAD~100 //回退到前一百个版本
$ git reset --hard <版本号> //回退到指定的版本
$ git rebase origin/master //直接和远端的master分支之间rebase
$ git rebase master //和本地的master分支之间rebase(本地master和远端的master之间可能不是同步的)
reset 三种模式的区别
- --hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。
(1) 要放弃目前本地的所有改变時,即去掉所有add到暂存区的文件和工作区的文件,可以执行 git reset -hard HEAD 来强制恢复git管理的文件夹的內容及状态;(2) 真的想抛弃目标节点后的所有commit(可能觉得目标节点到原节点之间的commit提交都是错了,之前所有的commit有问题)。
- --soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files),所以假如我们之前工作目录没有改过任何文件,也没add到暂存区,那么使用reset --soft后,我们可以直接执行 git commit 將 index暂存区中的內容提交至 repository 中。为什么要这样呢?这样做的使用场景是:假如我们想合并「当前节点」与「reset目标节点」之间不具太大意义的 commit 记录(可能是阶段性地频繁提交,就是开发一个功能的时候,改或者增加一个文件的时候就commit,这样做导致一个完整的功能可能会好多个commit点,这时假如你需要把这些commit整合成一个commit的时候)時,可以考虑使用reset --soft来让 commit 演进线图较为清晰。总而言之,可以使用--soft合并commit节点。
- --mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。总之工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录
(1)使用完reset --mixed后,我們可以直接执行 git add 将這些改变果的文件內容加入 index 暂存区中,再执行 git commit 将 Index暂存区 中的內容提交至Repository中,这样一样可以达到合并commit节点的效果(与上面--soft合并commit节点差不多,只是多了git add添加到暂存区的操作);(2)移除所有Index暂存区中准备要提交的文件(Staged files),我们可以执行 git reset HEAD 来 Unstage 所有已列入 Index暂存区 的待提交的文件。(有时候发现add错文件到暂存区,就可以使用命令)。(3)commit提交某些错误代码,或者没有必要的文件也被commit上去,不想再修改错误再commit(因为会留下一个错误commit点),可以回退到正确的commit点上,然后所有原节点和reset节点之间差异会返回工作目录,假如有个没必要的文件的话就可以直接删除了,再commit上去就OK了。
使用fetch更新仓库
//方法一 $ git fetch origin master //从远程的origin仓库的master分支下载代码到本地的>origin master $ git log -p master.. origin/master//比较本地的仓库和远程参考的区别 $ git merge origin/master//把远程下载下来的代码合并到本地仓库,远程的和>本地的合并 //方法二 $ git fetch origin master:temp //从远程的origin仓库的master分支下载到本地>并新建一个分支temp $ git diff temp//比较master分支和temp分支的不同 $ git merge temp//合并temp分支到master分支 $ git branch -d temp//删除temp
git fetch 后可以使用
git log FETCH_HEAD
产看差异
可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支。git merge origin/master
或者git rebase origin/master
表示在当前分支上,合并origin/master
5. 替换本地改动
$ git checkout -- filename //丢弃工作区的修改,不会影响已经提交到缓冲区的内容。指令先从缓存区中拉取版本还原,如果没有再到版本库中拉取还原。
$ git fetch origin //丢弃本地的所有改动和提交,到服务器上获取最新的的版本历史
$ git reset --hard origin:master //切换到拉到本地时的master
$ git pull <远程主机名><远程分支名>:<本地分支名> //在工作目录获取并合并远端的改动
$ git fetch origin 远程分支:本地分支 //拉取远程分支并创建本地分支
$ git pull [remote] [branch] //取回远程仓库的变化,并与本地分支合并
git pull和 git fetch 跟着一个 git merge FETCH_HEAD实现的功能一样,原理不一样
6.删除恢复文件
$ git rm fillename //删除指定文件
$ git rm
使用
rm filename
删除文件后使用git status
查看的时候能发现,只是在工作区删除了文件,操作并没有被add到缓存区,可以是使用git checkout -- filename
来恢复文件到工作区,或使用git add 来将删除提交到缓冲区。
使用git rm fillename
删除文件,指令执行之后git status
查看的时候发现删除操作已经add到了缓冲区这时候要恢复文件可以使用git reset head filename
执行后将删除的文件恢复到缓冲区后使用git checkout -- filename
恢复文件到工作区
从效果上看rm filename + git add filename == git rm filename
7. 推送改动
$ git remote //列出远程主机名
$ git push <远程主机名><本地分支名>:<远程分支名> //推动到远端仓库
$ git push origin master //将改动提交到远端仓库,可以把 master 换成你想要推送的任何分支
8. 子模块
$ git clone --recursive //
9:代码提交示例:
$ git status //查看修改
$ git add -u (git add <filename>)//将修改添加到缓冲区
$ git diff //查看改动,确定是要提交的内容
$ git commit -m "annotation" //将缓冲区提交到了 HEAD,并添加注释
$ git push <远程主机名><本地分支名>:<远程分支名> //推动到远端仓库
网友评论