以下内容均来自here,此处仅作摘录及个人参考
创建一个仓库
$ mkdir learngit
$ cd learngit
$ pwd
/home/name/learngit
通过git init
命令将这个目录变成Git可以管理的仓库
$ git init
Initialize empty Git repository in /home/name/learngit/.git/
编写一个readme.txt
文件,内容如下
Git is a version control system.
Git is free software.
需要将该文件放在上面创建好的learngit
目录下。
第一步:用git add
告诉git,把文件添加到仓库
$ git add readme.txt
注意:git命令必须在git仓库目录内执行,在仓库目录外执行是没有意义的
第二步:用命令git commit
告诉Git,把文件提交到仓库:
git commit -m "wrote a readme file"
为什么Git添加文件需要add
,commit
一共两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
修改readme.txt
文件后,运行git status
查看当前仓库的状态,每次修改都需要再次git add
,然后再用commit
命令提交,然后用git diff
查看修改的具体内容
git log
查看修改的历史记录。
回退到上一个记录
首先Git必须知道当前版本是什么,Git中用HEAD
表示当前版本,HEAD^
表示上一个版本,HEAD^^
表示上上一个版本。
回退版本:
git reset --hard HEAD^
git提供了git reflog
命令来记录每一次命令,可以用来查找commit ID
总结:
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
穿梭前,用git log
可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。
撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
git reset HEAD <file>
可以把暂存区的修改撤销掉,回到工作区的场景。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除操作
如果要删除文件,可以直接rm file
,此时工作区的文件被删除,但版本库里依然存在,此时需要用git rm file
来删除版本库中的文件,然后commit
该变化。
另一种情况是删错了,需要从版本库里恢复该文件,可以使用git checkout -- file
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
远程仓库
首先在GitHub上创建一个新的仓库,然后将本地的仓库添加到远程仓库上去,在本地的仓库下运行一下命令:
git remote add origin git@github.com:Marveller10/learngit.git
写一步,可以把本地库的所有内容推送到远程库上:
git push -u origin master
由于远程仓库是空的,所以第一次推送需要加上-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
之后,只要本地做了提交,就可以通过命令将本地的master分支的修改推送到GitHub上去。
git push origin master
删除远程库:
首先查看远程库信息
git remote -v
然后根据名字删除:比如删除origin
git remove rm origin
从远程库克隆
假设从零开始开发,最好的方式是先建立远程仓库,然后从远程库克隆,登录GitHub,创建一个新仓库,勾选Initialize this repository with a README
,这样GitHub会自动创建一个readme.md文件
之后使用命令
git clone git@github.com:Marveller/gitskills.git
之后进入gitskills目录里查看,可以发现已经有README.md
文件
分支管理:
查看分支:git branch
创建分支:git branch <name>
切换分支:git switch <name>
创建+切换分支:git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支: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,如果有冲突,要先处理冲突。
创建一个分支:
-
使用
git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit ID -
命令
git tag -a <tagname> -m "blablabla"
可以指定标签信息 -
命令
git tag
可以查看所有标签 -
命令git push origin 可以推送一个本地标签;
-
命令git push origin --tags可以推送全部未推送过的本地标签;
-
命令git tag -d 可以删除一个本地标签;
-
命令git push origin :refs/tags/可以删除一个远程标签。