工具篇:git

6 篇文章 0 订阅

git有在本地有三个区,分别是工作区、暂存区(索引区)和本地仓库。在远程有一个远程仓库。

global参数表示当前机器所有git仓库都会使用这项配置。当然也可能针对不同仓库配置不同用户名和邮箱。

git config --global user.name “tyler”

git config -- global user.email “tyler@163.com”

git中HEAD是一个引用,它指向某一个提交,表示当前正在该提交上进行编辑。一般都是全大小,有些版本可能支持小写,即head。

^表示向上一次提交,即父提交;而~<num>表示向上num个提交。其实^后也可跟数字,表示非默认的父提交。比如当前HEAD指向branch1分支,而branch1的最后一个提交包含了merge的branch2的代码。那么HEAD^表示branch1的父提交,HEAD^2表示branch2的父提交。^与~可以链式操作,比如git checkout HEAD~^2~1

一、仓库的使用

git init:初始化当前路径,用git管理

git add:增加工作区修改到暂存区

      git add path/to/file:增加文件修改到暂存区

      git add . :增加所有修改到暂存区

git commit:提交暂存区修改到本地仓库

      -a:省略git add步骤直接提交到本地仓库

      -m:提交修改的说明

      git commit -a -m 'message'

git push:推送本地仓库修改到远程仓库

     -f/--force:强制推送本地仓库修改到远程仓库(这个需要一些权限,没有权限会导致失败)

      git push origin branchName

git status:查看当前目录到状态

git clone:下载远程仓库文件到本地

    git clone http://remote_repo.git /path/to/localproject   下载远程仓库文件到本地指定目录,如果没有目录,那么默认下载到当前目录。

二、分支的使用

git branch:查看本地分支

    -r:查看远程仓库分支,git branch -r

   -d:删除本地分支,git branch -d branch_name

   -D:删除本地没有完全合并的分支

   -f:强制使某个引用指向某个提交,git branch -f master c1表示使master指向c1提交

   -u: 设置某一分支追踪远程分支,比如git branch -u origin/master feature,让feature追踪远程分支master,这样git pull/git push时都是feature与origin/master在通信,而非本地master。

    git branch new_branch:新建新分支new_branch

git checkout的实质是修改HEAD的引用。比如

git checkout commit1: 表示使HEAD指向commit1这个提交

git checkout HEAD^: 表示使HEAD指向当前提交的父提交

git checkout HEAD~2: 表示使HEAD指向当前提交的上上个提交

git checkout branch_name:表示使HEAD指向分支名对应的提交,而分支名对应的提交是该分支最后一次提交,所以可以用于切换分支

    -b:新建分支并切换

   --track:根据远程分支新建本地分支

   git checkout -b new_branch:新建分支new_branch并切换

  git checkout -b new_branch --track origin/master:根据远程master分支新建本地分支并切换  

  git checkout -- file:撤销保存到暂存区的修改

git push origin :remote_branch:删除远程分支

git merge local_branch :把local_branch的代码合并到当前分支

三、提交的修改

HEAD表示最近一次提交,HEAD^表示上上一次提交。多一个^表示再往前一次的提交。也可用HEAD~n表示有n个^。

git log:查看提交记录

    git log --pretty=oneline 文件名:查看文件的修改记录

git show commit-id:查看指定提交到修改内容

git reflog:查看历史操作

git commit --amend : 把暂存区的内容追加到本地仓库最后一次commit中,并生成新的commit-id。

git rebase:合并提交

    git rebase -i HEAD~n:合并最近n次提交,需要在vim界面选择如何合并,保存后再修改commit message。

    git rebase --abort:撤销刚才的合并,在push前可以撤销。

git reset:重置提交,删除commit回滚

    git reset --soft commit_code:重置代码为指定提交,但在本地保留之后工作区的修改。

    git reset --hard commit_code:重置代码为指定提交,并在本地删除之后工作区的修改。

如果合并或重置的提交已经推送到远程仓库,那么合并提交或重置提交后,再推送到远程仓库时都需要强制推送,没有权限则推送失败。

git revert:反做某一次提交,并作为一次新的提交。

    git revert head:反做上次提交

    git revert head^:反做上上次提交。如果最近的2次commit涉及同一文件,那么这个命令会出现冲突,需要解决。所以这种情况不建议这样操作。如果2次commit涉及不同文件,那么这个命令可以正常反作上上次的修改。

    git revert commit-id:原理与使用head、head^一样。即当commit-id是上次提交时,等价于git revert head;当commit-id是上上次提交时,如果最近2次提交的文件没有交集,那么可以正常反做,如果有交集,那么会有冲突。

reset与revert的区别

reset是通过删除某次提交实现回滚,使head指向被删提交的前一次提交。如果删除的提交已经push到远程仓库,那么reset后再push需要使用--force参数强制push。而revert是通过反做并生成新的提交实现回滚,head向前移动,可以正常push到远程仓库。

四、文件追踪

git rm --cached file_name:取消文件追踪但是在本地保留文件。

git rm -r --cached folder_name:取消目录追踪但是在本地保留。

如果已经push到远处仓库,需要在远程仓库删除掉这些不跟踪到文件。

五、标签管理

git中一个commit可以被修改,分支引用也会被修改,而tag引用是不会被修改的,除非先删除原tag。某个commit被打上tag后,就相当于成为一个锚点或里程碑,不会被再修改。用户可以在基于该commit上,检出新的分支开发功能。常用于对历史某个版本修复bug或是增加新功能,而上线时又不想带上后开发的新特征。

git tag:查看所有标签

git tag name:创建标签

git tag -a name -m “comment”:指定提交信息

git tag -d name:删除标签

git push origin name:把标签推送到远程仓库

git describe <ref>:没有ref引用,则默认是HEAD。输出<tag>_<numCommits>_g<hash>,<tag>是离ref最近的标签,numCommits是ref与tag相差多少个commit,hash是ref指向commit哈希值的前几位

附:ssh的使用

ssh-key -t rsa -C “my@email.com”(邮箱是注册github的邮箱)

生成后粘贴到github账号setting的ssh中。

ssh -T git@github.com: 判断本地与github是否连通

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值