git常用语句
1.安装git,也适用于升级
yum -y install gcc zlib-devel openssl-devel curl-devel \ expat-devel gettext-devel perl-ExtUtils-MakeMaker mkdir -p /server/tools cd /server/tools wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.7.4.tar.gz tar xf git-2.7.4.tar.gz cd git-2.7.4/ make prefix=/usr/local/git all make prefix=/usr/local/git install rm -rf /usr/bin/git ln -s /usr/local/git/bin/git /usr/bin/git git --version
2.使用git
工作区:就是在你的电脑里能看到的目录,比如创建的test;
版本库:工作区中有一个隐藏目录.git,它不算工作区,而是git的版本库,git的版本库里面存放了很多的东西,其中最重要的就是称为stage的暂存区,有git为我们自动创建的第一个分支master,以及指向master的一个指针叫head.
mkdir test git init git config --global user.name "lixiang" git config --global user.email "1746465163@qq.com" git config --list
在test目录中创建一个文件,此时文件的状态是Untracked(未被追踪);
用git add之后,文件被放到暂存区,状态变为Staged(已暂存);
用git commit,文件被放到本地仓库,状态变为Unmodified(未被修改);
编辑了这个文件后,它会从本地仓库被拉取到工作目录,状态变为Modified(被修改了).
echo "This is your First Page" > index.html git status Untracked files git add index.html git commit -m "first commit" # git rm --cached <file>演示 echo "pay module" > pay.html echo "new center" > news.html git add news.html pay.html # 此时发现pay.html还没开发完,不想commit这个文件了,就需要在暂存区将其删除 git rm --cached pay.html
3.分支管理
git status On branch master git branch about # 会在当前所在的提交对象上创建一个指针 git checkout about # Switched to branch 'about' 切换到分支about echo "about" > about.html git branch # 查看自己当前所在的分支 git add . git commit -m "about's index.html" echo 'second page' > second.html git add . git commit -m "second page" git checkout master # 此时master上有两次提交,about上有四次提交 git merge about # 在master上融合分支about git branch --merged # 查看已融合的分支 git branch --no-merged # 查看未融合的分支
4.reset
echo "this is second line" >> index.html echo "qwer" >> news.html git add news.html git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: news.html Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: index.html
查看日志
git log commit 1ed03656c29f2742314f054c8aba8705c52016d5 Author: lixiang <1746465163@qq.com> Date: Wed Dec 26 22:06:06 2018 +0800 second page commit 0e8f8c5878734792e9a94cc435cbeb7b4cd7b369 Author: lixiang <1746465163@qq.com> Date: Wed Dec 26 22:03:11 2018 +0800 about's index.html commit ab0e299c14f1357df828647a1b0476f829a2815a Author: lixiang <1746465163@qq.com> Date: Wed Dec 26 20:37:51 2018 +0800 commit news commit 672cc2a692754391725d7179d4d217a552e666a8 Author: lixiang <1746465163@qq.com> Date: Wed Dec 26 20:29:47 2018 +0800 first commit git reset --hard HEAD~1 HEAD is now at 0e8f8c5 about's index.html ls about.html index.html news.html
--soft:缓存区和工作目录都不会被改变(只回撤本地版本库)
--mixed:默认选项.缓存区和你指定的提交同步,但工作目录不受影响(回撤本地版本库和缓存区)
--hard:缓存区和工作目录都同步到你指定的提交(回撤本地版本库、缓存区和工作目录)
git reset --hard 1ed03656 # 回到第四次提交 # 如果嫌输出的信息太多,可以使用--pretty=oneline git log --pretty=oneline ls about.html index.html news.html second.html git diff HEAD -- filename可以查看工作区和版本库里面最新版本的区别
5.checkout和reflog
git reflog:把之前的ID都显示出来 0e8f8c5 HEAD@{0}: reset: moving to HEAD~1 1ed0365 HEAD@{1}: reset: moving to 1ed03656 0e8f8c5 HEAD@{2}: reset: moving to HEAD~1 1ed0365 HEAD@{3}: merge about: Fast-forward ab0e299 HEAD@{4}: checkout: moving from about to master 1ed0365 HEAD@{5}: commit: second page 0e8f8c5 HEAD@{6}: checkout: moving from master to about ab0e299 HEAD@{7}: checkout: moving from about to master 0e8f8c5 HEAD@{8}: checkout: moving from about to about 0e8f8c5 HEAD@{9}: commit: about's index.html ab0e299 HEAD@{10}: checkout: moving from master to about ab0e299 HEAD@{11}: commit: commit news 672cc2a HEAD@{12}: commit (initial): first commit git checkout 1ed0365 git status HEAD detached at 1ed0365 nothing to commit, working directory clean # 此时用git log查看,有四次提交,但创建一个新分支-reset,切换到reset, # 再切回master,发现status显示正常,但log只有三次,说明master没有真正回到第四次 git branch reset git checkout reset git checkout master git merge reset # 我觉得是checkout的问题,用reflog查出id,再用reset回滚应该也行 git reset --hard 1ed0365
git checkout有两个作用:在分支级别,是将指针切换到不同的提交对象;
git checkout -- filename:在文件级别,是撤销对文件的修改.
a.修改后还没有被放到暂存区,撤销修改就回到和版本库一模一样的状态;
b.已经添加到暂存区后,又作了修改,撤销修改就回到添加到暂存区后的状态.
原理:用版本库里的版本覆盖被修改的文件.
假如将文件提交到了暂存区,use "git reset HEAD <file>..." to unstage,用reset撤销缓存区的变更;
假如将文件commit到了本地版本库,可以用reset回滚;
假如将本地版本库推送到了远程版本库,可以推送一个符合你想要的标准的文件,一步步到最后,覆盖那个远程版本库上错误的文件.
6.删除文件
先创建文件,后add,再commit,然后删除工作区的文件 git add test.txt git commit -m "del test" rm -rf test.txt 现在你有两个选择:一是确实要从版本库中删除该文件,那就用删掉,并且git commit git rm test.txt git commit -m "remove test.txt" 如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心, 你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容. 另一种情况是删错了,因为版本库里还有呢,可以把误删的文件恢复到最新版本: git checkout -- test.txt git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以"一键还原".
7.标签管理
git tag -a v1.0 -m "version1.0 released" git tag -d v1.0 # 如果要推送某个标签到远程 git push origin v1.0 # 一次性推送全部尚未推送到远程的本地标签 git push origin --tags # 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除,然后,从远程删除 git tag -d v0.9 git push origin :refs/tags/v0.9
参考博客:https://www.cnblogs.com/kevingrace/p/5569728.html