1 git基础
1.1 初始化git仓库
git仓库也就是在git管理下的代码的版本库和一些git配置存放的地方,比如.git文件夹
初始化git仓库有两种方式:1、将尚未进行版本控制的本地目录转换为git仓库;2、从其他服务器克隆一个已存在的git仓库。
1.1.1 在已存在的目录中初始化仓库
进入一个目录执行
$ git init
该命令将在当前路径下创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪
执行 git status 命令,我们可以看到如下信息,表明文件还处于Untracked状态
$ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) szj.txt nothing added to commit but untracked files present (use "git add" to track)
下面我们要把想要的文件加入git跟踪,并提交。可以通过 git add 命令来指定所需的文件来进行追踪,然后执行 git commit
$ git add *.c $ git add LICENSE $ git commit -m 'initial project version'
git add命令是一个多用途命令,这里使用git add将文件加入跟踪。此外我们还可以使用这个命令把已修改文件放入暂存区。
1.1.2 克隆现有仓库
我们使用 git clone 命令克隆一个远端仓库
$ git clone https://github.com/libgit2/libgit2
这会在当前目录下创建一个名为libgit2的目录,并在这个目录下初始化一个.git 文件夹, 从远程仓库拉取下所有数据放入.git文件夹,然后从中读取最新版本的文件的拷贝,也就是checkout仓库中的最新版本作为工作副本。
1.2 git状态变化
在1.1中我们使用git init已经创建了一个本地仓库,并把文件加入了traced状态,并且我们有一个工作副本。通常我们会对工作副本进行修改,每当完成了一个阶段目标,我们就将工作副本中的修改提交到本地仓库。
在工作目录下的文件有两种状态:traced和untraced。而traced状态又会分为:Unmodified、Modified、Staged状态。
当我们使用git init初始化一个git仓库时,里面的文件默认处于Untraced状态,我们需要执行git add把文件加入跟踪;而git clone克隆一个远端仓库时,git在后台默认会将git仓库中的最新版本checkout到工作目录,且工作目录中的文件都是traced状态,且为unmodified状态。
当我们对工作目录中的文件做了修改,git将他们标记为modified状态。
我们可以有选择的将某些修改过的文件放入暂存区,然后提交已暂存的文件到本地仓库。
可以用git status命令查看状态。
克隆后立即执行git status
$ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean
说明工作目录是干净的。此外该命令还显示了当前所在分支,并告诉你这个分支和对应的远程分支没有偏离。
当我们新创建了文件,
$ git status On branch master Your branch is up-to-date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) README nothing added to commit but untracked files present (use "git add" to track)
会提示我们有一个untraced文件
我们使用git add跟踪新文件
$ git add README
我们再运行git status
$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: README
表明文件处于staged(暂存)状态。
当我们修改了一个已被traced的文件,将会看到下面内容
$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: README 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: CONTRIBUTING.md
我们执行git add命令,将修改的文件放入staged区。
$ git add CONTRIBUTING.md $ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: README modified: CONTRIBUTING.md
如果我么想查看工作目录和staged做了哪些修改,运行如下命令
$ git diff diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8ebb991..643e24f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -65,7 +65,8 @@ branch directly, things can get messy. Please include a nice description of your changes when you submit your PR; if we have to read the whole diff to figure out why you're contributing in the first place, you're less likely to get feedback and have your change -merged in. +merged in. Also, split your changes into comprehensive chunks if your patch is +longer than a dozen lines. If you are starting to work on a particular area, feel free to submit a PR that highlights your work in progress (and note in the PR title that it's
如果我们想查看staged和已提交的区别,运行如下命令
$ git diff --staged diff --git a/README b/README new file mode 100644 index 0000000..03902a1 --- /dev/null +++ b/README @@ -0,0 +1 @@ +My Project
下一步,我们把staged区的代码提交到本地仓库。执行命令git commit或者git commit -m '注释信息'
$ git commit -m "Story 182: Fix benchmarks for speed" [master 463dc4f] Story 182: Fix benchmarks for speed 2 files changed, 2 insertions(+) create mode 100644 README
执行commit后,会显示一些信息,这些信息包括当前分支是哪个分支,以及修改了几个文件、插入和删除了多少行。
如果我们提交时使用了-a参数(git commit -a -m '注释信息'),将可以省略git add命令。表示把所有已修改的文件放入staged区然后再提交。
我们使用git rm命令移除一个文件,这将移除staged区和工作目录中的文件
$ git rm PROJECTS.md rm 'PROJECTS.md' $ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) deleted: PROJECTS.md
下次提交,该文件将不再纳入版本管理了。
但有时候我们想把staged区或者git仓库中删除,但是仍然希望保留在当前工作目录中(比如我们把大量编译文件放入了staged区),我们可以使用如下命令
$ git rm --cached README
1.3 git log
该命令用于查看提交记录
$ git log commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <[email protected]> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <[email protected]> Date: Sat Mar 15 16:40:33 2008 -0700 removed unnecessary test commit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon <[email protected]> Date: Sat Mar 15 10:31:28 2008 -0700 first commit
查看patch,执行git log -p或git log --patch将会显示文件修改详情
$ git log -p commit 17280786ca1714eb2a397f5a7f63d5b5ff15f37b (tag: v1.0) Author: xxx Date: Wed Sep 21 13:56:11 2022 +0800 修改szj.txt diff --git a/szj.txt b/szj.txt index aba5a14..0286f8d 100644 --- a/szj.txt +++ b/szj.txt @@ -1 +1,2 @@ -aaabbccdd \ No newline at end of file +aaabbccdd +s \ No newline at end of file
$ git log -2,表示只显示最近的2次提交
$ git log -2 commit 4dd4da02828991a353d44664443664ee76ebb519 (HEAD -> master) Author: zhenjingcool Date: Wed Sep 21 21:47:51 2022 +0800 rm commit b3f62fcc4d7b7078d7a10cf5f1bb225df52ce1ca (origin/master) Author: zhenjingcool Date: Wed Sep 21 16:31:56 2022 +0800 推送到远端仓库
一行显示
$ git log --pretty=oneline ca82a6dff817ec66f44342007202690a93763949 changed the version number 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
格式化显示
$ git log --pretty=format:"%h - %an, %ar : %s" ca82a6d - Scott Chacon, 6 years ago : changed the version number 085bb3b - Scott Chacon, 6 years ago : removed unnecessary test a11bef0 - Scott Chacon, 6 years ago : first commit
git log --pretty=format常用选项
选项 | 说明 |
---|---|
|
提交的完整哈希值 |
|
提交的简写哈希值 |
|
树的完整哈希值 |
|
树的简写哈希值 |
|
父提交的完整哈希值 |
|
父提交的简写哈希值 |
|
作者名字 |
|
作者的电子邮件地址 |
|
作者修订日期(可以用 --date=选项 来定制格式) |
|
作者修订日期,按多久以前的方式显示 |
|
提交者的名字 |
|
提交者的电子邮件地址 |
|
提交日期 |
|
提交日期(距今多长时间) |
|
提交说明 |
--since和--util
$ git log --since=2.weeks
-S
这个参数是一个过滤器,可以过滤提交内容(比如文件名、文件内容、提交注释中的关键字过滤等)
常用的git log参数
选项 | 说明 |
---|---|
|
按补丁格式显示每个提交引入的差异。 |
|
显示每次提交的文件修改统计信息。 |
|
只显示 --stat 中最后的行数修改添加移除统计。 |
|
仅在提交信息后显示已修改的文件清单。 |
|
显示新增、修改、删除的文件清单。 |
|
仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。 |
|
使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。 |
|
在日志旁以 ASCII 图形显示分支与合并历史。 |
|
使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。 |
|
|
git log常用的限制输出参数
选项 | 说明 |
---|---|
|
仅显示最近的 n 条提交。 |
|
仅显示指定时间之后的提交。 |
|
仅显示指定时间之前的提交。 |
|
仅显示作者匹配指定字符串的提交。 |
|
仅显示提交者匹配指定字符串的提交。 |
|
仅显示提交说明中包含指定字符串的提交。 |
|
仅显示添加或删除内容匹配指定字符串的提交。 |
标签:文件,教程,git,--,master,提交,使用,commit From: https://www.cnblogs.com/zhenjingcool/p/16717395.html