写在前面:

本文只是对于自己学习了git后的关于git命令的一些记录,其中包含了一些注意事项和说明点,但是绝对不能作为git初学者系统入门的教程,关于git学习,建议大家前往廖雪峰老师的教程,附上链接:廖雪峰官方网站-git教程

Git分布式版本控制,每一台主机都是一个仓库,可以相互之间交换,修改,但是为了交换修改方便,会有一台类似中央控制的服务器存在。

创建本地仓库

创建目录mkdir gitdir
进入目录cd gitdir
初始化(将目录变为Git可以管理的仓库)

git init

【初始化不一定需要在空目录下,当前目录下会多一个.git文件是Git用来跟踪管理版本库的】



 

 

 

 

【二进制文件使用版本控制管理无法确定具体修改了什么】

编写文件:如read.txt
将文件放入Git repositroy:

工作区文件放入暂存区git add read.txt
暂存区文件提交版本仓库git commit -m "commit-tips"

【commit可以一次性提交多个文件,在add完成后将新增加的文件全部commit】

查看当前仓库的状态:git status【确定当前仓库的改动,包括文件修改】

查看修改的文件与仓库中文件的不同:git diff read.txt

提交修改和提交新文件一样的两步骤:git add read.txt->git commit -m "commit-tips"【可随时查看git status确保修改的文件状态】

git每commit一次相当于创建了当前工作区的快照,以便进行版本恢复

查看历史记录:git log【从最近到最远显示】| git log --pretty=oneline【历史纪录简单显示】

注:特别长的一串看起来像乱码的数字是commit id(版本号),由SHA1(安全哈希算法)计算出来的非常大的数字用十六进制表示,为避免多人在同一个版本库中工作版本号冲突

回退版本:git reset --hard HEAD^【HEAD表示当前版本,HEAD^上一版本,HEAD^^上上个版本,HEAD~100上100个版本】

注:git log查看历史记录时,回退之前的版本记录已经看不见了,如果后悔了,两种情况:

(1)如果回退命令行没有关闭,可以找到回退前版本的commit id,仍旧可以通过git reset --hard commitid(前几位就可以了)

(2)关闭了电脑,命令行已经没有commitid显示,使用git reflog查看命令历史,找到commitid

到目前为止,创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,git commit就是往master分支上提交更改。

需要提交的文件修改通通放到暂存区(git add),然后,一次性提交暂存区的所有修改到分支上(git commit)。

查看工作区和版本库里面最新版本的区别:git diff HEAD -- read.txt

注:Git是跟踪修改(增加,删除)的,每次修改,如果不用git add到暂存区,那就不会加入到commit中

不小心多加了一次得罪人的修改
撤销当前工作区的修改:git checkout -- filename【-- 很重要,让该文件回到最近一次git commit或git add时的状态】

撤销暂存区的修改(将修改回退到工作区):git reset HEAD filename

注:如需完全撤销当前操作,需撤销工作区的修改;如果提交到了版本库,可使用版本回退,前提是没有推送到远程版本库

从版本库删除文件:git rm filename

注:先手动删除文件,然后使用git rm <file>和git add<file>效果是一样的。

工作区误删文件但是版本库中有:git checkout -- test.txt

注:git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。(从来没有被添加到版本库就被删除的文件,是无法恢复的!)

先有本地仓库后关联远程仓库

远程仓库与已有的本地仓库关联:git remote add origin git@github.com:yourgithubname/learngit.git【origin是远程库的名字】

第一次将本地库内容推送到远程库:git push -u origin master【-u参数使Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来】

将本地库内容推送到远程库:git push origin master

先有远程仓库后克隆到本地仓库

从远程仓库克隆本地库:git clone 地址(ssh或者https协议)

关于分支:

创建分支:git branch dev
切换分支:git checkout dev
上述两条命令合并:git checkout -b dev(创建并切换)

查看分支:git branch【当前分支前会标注*】
合并分支:git merge dev【在master分支上;用于合并指定分支到当前分支】
删除分支:git branch -d dev
查看分支合并情况:git log --graph --pretty=oneline --abbrev-commit

禁用FastFroward的分支合并:git merge --no-ff -m "merge with no-ff" dev【会创建一个新的commit】

储存当前工作区:git stash
查看存储的工作区:git stash list

恢复存储的工作区:
git stash apply【需要使用git stash drop删除stash list中的已恢复的内容】
git stash pop【恢复的同时删除list中的内容】
指定恢复某一个工作区:git stash apply stash@{0}

删除一个没有被合并的分支:git branch -D <name>【强行删除】

多人合作【摘】:

查看远程库信息,使用git remote -v;

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

rebase操作可以把本地未push的分叉提交历史整理成直线;

rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。


标签操作【摘】

标签:与某个commit挂钩,且不可动,如果某个commit出现在不只一个分支里,则标签会出现在各个分支里

创建标签:git tag  tagname【默认是当前版本HEAD】

指定标签信息的标签创建:git tag -a tagname -m “msg”

查看标签:git tag

查看标签详细信息:git show tagname

命令git push origin <tagname>可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签;

命令git tag -d <tagname>可以删除一个本地标签;

命令git push origin :refs/tags/<tagname>可以删除一个远程标签

git忽略文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

强制添加已忽略的文件到暂存区:git add -f filename

查看是否文件被.gitignore记录:git check-ignore -v filename

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐