参考学习链接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
$ git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git
创建版本库1.创建空目录 mkdir anmygit
2.通过git init命令把这个目录变成Git可以管理的仓库
mi@mi-OptiPlex-7060:~/anmygit$ git init 初始化空的 Git 仓库于 /home/mi/anmygit/.gi
3. 在此目录下新建文件,并将文件放到Git仓库
root@mi-OptiPlex-7060:/home/mi/anmygit# git add readme.txt
root@mi-OptiPlex-7060:/home/mi/anmygit# git commit -m "add a readme file..."
[master (根提交) 390448c] add a readme file...
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
4. 相关命令
git status---随时掌握工作区的状态
修改相关文件后,使用git status提示修改的文件
git diff readme.txt ---查看修改的内容
git diff HEAD -- readme.txt
---查看工作区和版本库里面最新版本的区别
git log---
显示从最近到最远的提交日志
git log --pretty=oneline---简化输出的日志信息
git reset --hard HEAD^ ---回退到上一个版本,上上一个版本就是HEAD^^,
往上100个版本写成HEAD~100
git reset --hard d6cde ---回退到指定的版本,版本号以d6cde开头
说明:Git的版本回退速度非常快,因为Git在内部有个指向当前版本的
HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL
改为指向add distributed
,然后顺便把工作区的文件更新了。所以你让HEAD
指向哪个版本号,你就把当前版本定位在哪。
git reflog
--记录你的每一次命令,以便确定要回到未来的哪个版本
。
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用
git reflog
查看命令历史,以便确定要回到未来的哪个版本。
工作区(Working Directory):
在电脑里能看到的目录,eg anmygit
版本库:工作区有一个隐藏目录
.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支
master
,以及指向master
的一个指针叫HEAD
。
把文件往Git版本库里添加的时候,是分两步执行的:
第一步:用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步:用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,git commit
就是往master
分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后执行git commit
就可以一次性把暂存区的所有修改提交到分支。
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:
版本库变成下图这样,暂存区就没有任何内容了:
第一次修改 -> git add
-> 第二次修改 -> git add
-> git commit
每次修改,如果不用git add
到暂存区,那就不会加入到commit
中。
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD
,就回到了场景1,第二步按场景1操作。
git rm
用于删除版本库中的一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git
;
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph
命令可以看到分支合并图。
git merge --no-ff -m "merged bug fix 10" issue-10
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D
强行删除。
多人协作的工作模式通常是这样:
首先,可以试图用git push origin
推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull
试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin
推送就能成功!
如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to
。
查看远程库信息,使用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
用于新建一个标签,默认为HEAD
,也可以指定一个commit id;
命令git tag -a
可以指定标签信息;
命令git tag
可以查看所有标签。
命令git push origin
可以推送一个本地标签;
命令git push origin --tags
可以推送全部未推送过的本地标签;
命令git tag -d
可以删除一个本地标签;
命令git push origin :refs/tags/
可以删除一个远程标签。
git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A :是上面两个功能的合集(git add --all的缩写)
git fetch---将远程仓储fetch到本地
解决方法:https://stackoverflow.com/questions/6692292/git-commit-problem-unable-to-append-to-git
说明:chown 命令的 -R: 处理指定目录以及其子目录下的所有文件
-c : 显示更改的部分的信息
此时只需要将远程配置删除,重新添加即可;
git remote rm origin