目录
安装简介
Git官网
一直next,目录的时候换成自己自定义的就好了。
Git 概念图
可参考教程:
廖雪峰版
猴子版
粗略版
1.初始化命令
1.1 配置身份
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置。不用的话可以配置特定的仓库身份。
2.2 检查配置
$ git config --global user.name
$ git config --global user.email
3.3 创建本地仓库
找一个文件夹,然后通过git init
让该文件被git
管理。
$ cd /d/Git/
$ mkdir learngit
$ cd learngit/
$ pwd
/d/Git/learngit
$ git init
Initialized empty Git repository in D:/Git/learngit/.git/
我当前的仓库为/d/Git/learngit
。如果你使用Windows
系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
可以看到当前目录多了个.git
文件。这个目录是Git来跟踪管理版本库的,别手动修改这个目录里面的文件,会把Git仓库给破坏了。
2.文件操作
2.1 添加文件到版本库
$ git add sample.txt
$ git commit -m "创建了简单文件"
[master (root-commit) d5fecc7] 创建了简单文件
1 file changed, 1 insertion(+)
create mode 100644 sample.txt
git add <files>
: 添加文件 (文件、目录) 到仓库,一次性可以添加很多个文件。(文件需要在被管理的仓库下git init
)
git add .
添加当前目录所有文件
git commit -m <message>
:提交暂存区所有文件到仓库。
git commit <files> -m <message>
:提交暂存区指定文件到仓库。
为什么Git添加文件需要add
,commit
一共两步呢?
因为commit可以一次提交很多文件,所以你可以多次add不同的文件.例如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
2.2 查看文件变更
对刚才提交的文件进行改动。
git status
:查看当前库状态。
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: sample.txt
no changes added to commit (use "git add" and/or "git commit -a")
git diff
:查看全局变动。
git diff <files>
: 查看具体某个文件变动。
git diff head <files>
:命令可以查看工作区和版本库里面最新版本的差异。
$ git diff
diff --git a/sample.txt b/sample.txt
index 105266f..33870e8 100644
--- a/sample.txt
+++ b/sample.txt
@@ -1 +1,3 @@
-学习git
\ No newline at end of file
+学习git
+
+二次学习git
\ No newline at end of file
这时候需要提交就用git add
该文件到变更区,然后git commit
到本地库。
2.3 查看历史版本
git log
:查看全部历史记录。
git log 分支
:查看某个分支历史记录。
git log -1
:查看一条提交记录。
git log -1 -p
:查看一条记录和变动内容。
git log --oneline
:单行简单显示。
git log --pretty=oneline
:单行id全显。
git log id号
:查看某个id号的提交记录。
git log --graph --pretty=oneline --abbrev-commit
:查看当前分支合并情况。
git log --graph --oneline
可以达到一样的效果。
PJX@DESKTOP-93BASN4 MINGW64 /d/Git/learngit (master)
$ git log
commit 3561b96a80f534c710c5650af4c4c1c24dc9911d (HEAD -> master)
Author: pjx <995536807@qq.com>
Date: Sat Jul 16 20:30:46 2022 +0800
三次提交
commit 960aaabfdc1471b7d9b6026e1fe19ce8a7a17cee
Author: pjx <995536807@qq.com>
Date: Sat Jul 16 20:27:30 2022 +0800
二次提交
commit d5fecc7b13c4cb2b177838dbb2ac961db497f08c
Author: pjx <995536807@qq.com>
Date: Sat Jul 16 13:25:31 2022 +0800
创建了简单文件
PJX@DESKTOP-93BASN4 MINGW64 /d/Git/learngit (master)
$ git log --oneline
3561b96 (HEAD -> master) 三次提交
960aaab 二次提交
d5fecc7 创建了简单文件
PJX@DESKTOP-93BASN4 MINGW64 /d/Git/learngit (master)
$ git log --pretty=oneline
3561b96a80f534c710c5650af4c4c1c24dc9911d (HEAD -> master) 三次提交
960aaabfdc1471b7d9b6026e1fe19ce8a7a17cee 二次提交
d5fecc7b13c4cb2b177838dbb2ac961db497f08c 创建了简单文件
2.4 回退版本
版本可以根据版本号id,也可以根据HEAD
:当前版本 | HEAD^
:上个版本 | HEAD^^
:上上个版本 | …HEAD~100
git reset --hard 版本号
:切换至某个版本
git reflog <files>
:查看每次的操作记录,可以看到版本号id。
PJX@DESKTOP-93BASN4 MINGW64 /d/Git/learngit (master)
$ git reset --hard HEAD^
HEAD is now at 960aaab 二次提交
PJX@DESKTOP-93BASN4 MINGW64 /d/Git/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean
PJX@DESKTOP-93BASN4 MINGW64 /d/Git/learngit (master)
$ git log
commit 960aaabfdc1471b7d9b6026e1fe19ce8a7a17cee (HEAD -> master)
Author: pjx <995536807@qq.com>
Date: Sat Jul 16 20:27:30 2022 +0800
二次提交
commit d5fecc7b13c4cb2b177838dbb2ac961db497f08c
Author: pjx <995536807@qq.com>
Date: Sat Jul 16 13:25:31 2022 +0800
创建了简单文件
PJX@DESKTOP-93BASN4 MINGW64 /d/Git/learngit (master)
$ git reset --hard 3561
HEAD is now at 3561b96 三次提交
$ git reflog sample.txt
3561b96 (HEAD -> master) HEAD@{0}: reset: moving to 3561
960aaab HEAD@{1}: reset: moving to HEAD^
3561b96 (HEAD -> master) HEAD@{2}: commit: 三次提交
960aaab HEAD@{3}: commit: 二次提交
d5fecc7 HEAD@{4}: commit (initial): 创建了简单文件
2.5 撤销提交
git restore <file>
:进行取消本次工作区修改(还在工作区使用)。
git restore --staged <file>
:删除暂存区该文件(已经git add
到暂存区使用)
$ git add sample.txt
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: sample.txt
$ git restore --staged sample.txt
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: sample.txt
no changes added to commit (use "git add" and/or "git commit -a")
$ git restore sample.txt
2.6 删除文件
创建文件add、commit到版本库就省略了。
情况一:删错了
git checkout -- <file>
: 用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
git restore <file>
:通过撤销工作区的操作可以复原。
$ rm -rf test1.txt
$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: test1.txt
no changes added to commit (use "git add" and/or "git commit -a")
情况二:删除
git rm <file>
:(若本地文件还存在,也会把本地删掉) 把 删除该文件的操作 提交到暂存区。(commit
提交到版本库后彻底删除)
$ git rm test1.txt
rm 'test1.txt'
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: test1.txt
$ git commit -m "删除测试文件"
[master da0e9ca] 删除测试文件
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 test1.txt
3.远程仓库
该部分都是针对如何关联远程仓库操作。常见的远程仓有GitHub、Gitee、Gitlab。本次以GitHub
为例子。先在github上自行创建一个repository
。
3.1 添加远程库
git remote add <远程库别名> 远程库版本链接
:将本地库关联到远程库。
git push -u <别名> <分支>
:推送到远程库。
SSH警告
第一次通过Git使用clone
、push
命令就会出现以下情况。输入yes就会把GitHub的Key添加到本机的一个信任列表里。
$ git push -u origin master
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
3.2 远程库权限
要想能够在远程库操作,单单remote add 关联还不够,需要把本地生成的密钥加入到远程库中。
cd ~/.ssh
:切换到本地密钥管理目录。
ssh-keygen -t rsa -C <解释>
:生成ssh密钥。
生成方式有很多,不逐个说明了。ssh-keygen --help
自己查看。
$ ssh-keygen -t rsa -C "generate link to github key"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/PJX/.ssh/id_rsa):
/c/Users/PJX/.ssh/id_rsa already exists.
Overwrite (y/n)? n "此处发现已经有了,所以就n取消生成了,没有的就一直回车"
$ ll
total 9
-rw-r--r-- 1 PJX 197121 2602 Sep 15 2021 id_rsa
-rw-r--r-- 1 PJX 197121 570 Sep 15 2021 id_rsa.pub
-rw-r--r-- 1 PJX 197121 713 Jul 17 12:30 known_hosts
PJX@DESKTOP-93BASN4 MINGW64 ~/.ssh
$ cat id_rsa.pub
**密钥**
3.3 删除关联远程库
git remote -v
:查看关联远程库信息(可以看到对应的push
和fetch
权限)。
git remote rm <name>
:删除关联某个远程库。
$ git remote -v
origin git@github.com:Tomcat-8/learngit.git (fetch)
origin git@github.com:Tomcat-8/learngit.git (push)
origin1 git@github.com:Tomcat-8/learngit1.git (fetch)
origin1 git@github.com:Tomcat-8/learngit1.git (push)
$ git remote rm origin1
$ git remote -v
origin git@github.com:Tomcat-8/learngit.git (fetch)
origin git@github.com:Tomcat-8/learngit.git (push)
3.4 克隆远程库
git clone 远程库版本链接
:克隆远程库到本地(工作区)。
$ git clone git@github.com:Tomcat-8/learngit1.git
Cloning into 'learngit1'...
warning: You appear to have cloned an empty repository.
$ ll
total 3
drwxr-xr-x 1 PJX 197121 0 Jul 16 22:06 learngit/
drwxr-xr-x 1 PJX 197121 0 Jul 17 13:14 learngit1/
4.分支管理
**
git branch
:展现该项目的所有分支和指出当前的。
git branch <分支名>
:在当前分支复刻出新分支。
git checkout <分支名>
:切换到指定的分支。
git checkout -b <分支名>
:创建分支,并且切换到该分支。
git switch -c <分支名>
:创建分支,并且切换到该分支。
git merge <分支名>
:将指定分支合并到当前分支中。
git merge --no-ff -m <解释> <分支>
:其中--no-ff
是禁用Fast-forward
模式。
git branch -d <分支名>
:删除指定分支。
git branch -D <分支名>
:强制删除(未合并过的分支)。
**
以下合并方式为Fast-forward
-快进模式,即直接将dev
的提交指向dev-1.0.0
。这样的模式,在删除分支后,会丢掉分支信息。不会记录merge
的提交,所以一般使用--no-ff
。
PJX@DESKTOP-93BASN4 MINGW64 /d/Git/learngit1 (dev)
$ git merge dev-1.0.0
Updating f949fb7..1c909f4
Fast-forward
testmerge.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testmerge.txt
4.1 合并冲突
git merge --abort
:放弃本次合并。
想要解决冲突,要
vi
修改文件,解决行冲突,或者git rm
删掉不用的冲突文件。然后才能git commit
本次合并请求。
git log --graph --pretty=oneline --abbrev-commit
:查看当前分支合并情况。
提交后可以查看当前分支合并情况
$ git log --graph --pretty=oneline --abbrev-commit
* fc05f5f (HEAD -> dev) resolute conflic
|\
| * 6853431 (feature1) :# Please enter the commit message for your changes. Lines starting
* | 4b35e4c commit conflic
|/
* 1c909f4 mergetest
* f949fb7 (main) first
4.2 独立暂存区(Bug分支情景)
例如:当遇见dev
分支任务在修改到一半,main
的代码出现了线上问题需要排查,这时候如果直接git checkout main
就会把dev上的代码merge到main工作区。所以在不影响原先的任务、不影响观看原先main的代码,如何操作呢?
git stash
:将当前分支在本地版本库的暂存区内容先独立存储。
git stash list
:查看当前分支独立暂存区的内容。
git stash apply
:恢复独立暂存区所有内容到工作区。
git stash apply <独立号>
:恢复独立暂存区某个独立号内容到工作区。
git stash drop
:清除该分支独立暂存区。
git stash pop
:恢复独立暂存区到工作区,同时清理。
git cherry-pick 版本号
:复刻特定的提交到当前分支。
git stash apply
+git stash drop
恢复后,独立暂存区不会自动清掉,需要手动清理。
$ git stash
Saved working directory and index state WIP on dev: f949fb7 first
$ git stash list
stash@{0}: WIP on dev: f949fb7 first
$ git stash apply
On branch dev
Your branch is up to date with 'origin/dev'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: stash.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
file.txt
$ git stash drop
Dropped refs/stash@{0} (a14472d700934ece80fbd75a1f0845a27aa22d88)
当你去main
处理完Bug后,此时你会发现,dev
是从main
复刻出来的,也存在这个Bug。解决方案如下
- 手动在当前分支修改(缺陷 :效率低)
- 直接将
main
合并到dev
(缺陷 :如果main
延伸了新的文件,dev
并没有,这样会一起merge
过来。) - 复制一个解决Bug的提交到当前分支(
git cherry-pick
)
$ git log main --oneline
d930a34 (origin/main, main) stash bug
f949fb7 first
PJX@DESKTOP-93BASN4 MINGW64 /d/Git/learngit1 (dev)
$ git cherry-pick d930a34
[dev 776c0ce] stash bug
Date: Sun Jul 17 22:13:22 2022 +0800
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 stash.txt
4.3 推送和拉取
git push 别名 分支名
:推送到远程指定分支上。(别名是git remote
中指定的,例如origin )
git push
:默认推送当前分支。
git pull
:拉取当前远程分支最新情况。
git checkout -b 本地分支 origin/远程分支
:在本地复刻远程的分支。(分支名最好和远程保持一致)
git branch --set-upstream 本地分支 origin/远程分支
:建立本地分支和远程分支的关联。
4.4 变基
变基:以什么版本为基础做了修改,变基就是把版本基础点变动了。
git rebase
:提交后,远程以当前提交作为基点。(可以把分叉的提交变成直线)
$ git log --pretty=oneline --graph
* bcff2aee83da823cb72ae835671b4f866b5fbf3e (HEAD -> main, origin/main) Merge branch 'main' of github.com:Tomcat-8/learngit1
|\
| * 2bb0709974a99ebd454d36148be68386176a7915 rebase test
* | 4bc65ca4adb04789c1cf261f2ae2c880fbcf4097 rebase look
|/
* d930a34c087f406040846d98f6f07bbd6b566979 stash bug
* f949fb7957f06f8f2b2823a4f59ae824f3fb59c0 first
$ ll
total 0
-rw-r--r-- 1 PJX 197121 0 Jul 17 23:05 file.text
-rw-r--r-- 1 PJX 197121 0 Jul 17 23:08 file.txt
-rw-r--r-- 1 PJX 197121 0 Jul 17 14:55 readme.md
-rw-r--r-- 1 PJX 197121 0 Jul 17 22:19 stash.txt
$ git rm file.text
rm 'file.text'
$ git commit -m "delete file to show rebase method"
[main 6a43735] delete file to show rebase method
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 file.text
$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
$ git rebase
Current branch main is up to date.
$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 226 bytes | 226.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:Tomcat-8/learngit1.git
bcff2ae..6a43735 main -> main
$ git log --oneline
6a43735 (HEAD -> main, origin/main) delete file to show rebase method
bcff2ae Merge branch 'main' of github.com:Tomcat-8/learngit1
4bc65ca rebase look
2bb0709 rebase test
d930a34 stash bug
f949fb7 first
5.标签管理
标签总是和某个commit
挂钩。如果这个commit
既出现在main
分支,又出现在dev
分支,那么在这两个分支上都可以看到这个标签。
git tag
:查看所有标签
git show 标签名
:查看某个标签信息。
git tag <tagname>
:用于新建一个标签,默认为HEAD,也可以指定一个commit id
git tag -a <tagname> -m "说明"
:打标签同时带上说明。
git tag <tagname> 提交号
:为某个特定的提交打上标签。
git tag -d <tagname>
:删除某个标签。
git push origin :refs/tags/<tagname>
:删除某个远程标签。
git push origin <tagname>
:推送一个本地标签。
git push origin --tags
:推送所有的标签。
$ git show v0.9
tag v0.9
Tagger: pjx <youxiang@qq.com>
Date: Tue Jul 19 11:30:22 2022 +0800
version by 0.9
commit 6a4373542c3314ee4905d0a97bb53a54a4731b04 (HEAD -> main, tag: v0.9, tag: v0.8, origin/main)
Author: pjx <youxiang@qq.com>
Date: Sun Jul 17 23:12:07 2022 +0800
delete file to show rebase method
diff --git a/file.text b/file.text
deleted file mode 100644
index e69de29..0000000
$ git tag v1.0 f949fb7 -m "自定义打标签"
$ git tag
v0.8
v0.9
v1.0
$ git tag -d v0.8
Deleted tag 'v0.8' (was 6a43735)
$ git push origin --tags
Enumerating objects: 2, done.
Counting objects: 100% (2/2), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 300 bytes | 300.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:Tomcat-8/learngit1.git
* [new tag] v0.9 -> v0.9
* [new tag] v1.0 -> v1.0
$ git push origin :refs/tags/v0.9
To github.com:Tomcat-8/learngit1.git
- [deleted] v0.9
6.自定义Git
git config --global color.ui true
:全局颜色。(默认为true)
git check-ignore -v 要提交的文件
:查看文件被忽略,匹配.gitignore
哪条规则
git add -f 文件
:-f 用于强制提交,忽略规则。
6.1 忽略文件
Git工作区的根目录下创建一个特殊的.gitignore
文件。可以在这个文件中添加忽略的文件。
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
- 已经被
add
的文件后面再添加到.ignore
是无效的(需要先清空缓存再次add
)
git rm -rf --cached .
git add .
虽然可以用
git add -f
强制添加进去,但有强迫症的童鞋还是希望不要破坏.gitignore
规则,这个时候,可以添加两条例外规则:排除所有.开头的隐藏文件:
.*
排除所有.class文件:
*.class
不排除.gitignore和App.class:
!.gitignore
!App.class
把指定文件排除在.gitignore规则外的写法就是!+文件名
,所以,只需把例外文件添加进去即可。
$ vi .gitignore
$ cat .gitignore
#Windows
Desktop.ini
ignore.*
*.png
$ touch ignore.txt|show.png
bash: show.png: command not found
$ git status '可以看到此处只提示.gitignore文件了,其余两个被忽略了'
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
$ git add ignore.txt
The following paths are ignored by one of your .gitignore files:
ignore.txt
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
$ git check-ignore -v ignore.txt
.gitignore:3:ignore.* ignore.txt
6.2 配置别名
如何达成git st
== git status
?
git config --global alias.st status
git config --global alias.后来 原本
:相当于 后来 == 原本。
cat .git/config
:查看仓库的配置文件。
cat .gitconfig
:查看用户的配置文件。
配置Git的时候,加上--global
是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
案例演示:git restore --staged
替换成 git unstage
如果参数有单引号就用双引号替换:
git commit -m "update 'README.txt'"
$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: file.txt
$ git config --global alias.unstage 'restore --staged'
$ git unstage file.txt
$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: file.txt
no changes added to commit (use "git add" and/or "git commit -a")
可以自己试试这个
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
6.3 自定义Git服务器
自己搭建一台Git服务器作为私有仓库
搭建Git服务器需要准备一台运行Linux
的机器,强烈推荐用Ubuntu
或Debian
,这样,通过几条简单的apt命令就可以完成安装。
1️⃣安装git:
$ sudo apt-get install git
2️⃣创建一个git用户,用来运行git服务:
$ sudo adduser git
3️⃣创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub
文件,把所有公钥导入到/home/git/.ssh/authorized_keys
文件里,一行一个。
4️⃣初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/sample.git
,在/srv
目录下输入命令:
$ sudo git init --bare sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
$ sudo chown -R git:git sample.git
5️⃣禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd
文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
6️⃣克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
答疑点
Q:输入git add readme.txt
,得到错误:fatal: not a git repository (or any of the parent directories)
。
A:Git命令必须在Git仓库目录内执行(git init
除外),在仓库目录外执行是没有意义的。
Q:输入git add readme.txt
,得到错误fatal: pathspec 'readme.txt' did not match any files
。
A:添加某个文件时,该文件必须在当前目录下存在,用ls
或者dir
命令查看当前目录的文件,看看文件是否存在,或者是否写错了文件名。
Q:输入git status
,得到错误untracked files: (use "git add<file>......."to include in what willbe committed
。
A:当前版本库你还没添加任何文件,用git add
添加先。