1 创建工作区
$ mkdir learngit 创建文件夹
$ cd learngit 进入文件夹
$ pwd 显示当文件夹
2 将这个工作区转变为GIT可以管理的本地仓库
$ git init 把这个目录变成Git可以管理的仓库
$ git add demo.txt 将文件从工作区添加到暂存区
$ git commit -m “wrote a readme file” 将文件提交到本地仓库
$ git status 查看状态 假如提交过的文件被修改,那么就会有相关提示信息
git diff demo.txt 查看修改了哪些提交过的文件被修改的内容
$ git add demo.txt 知道被修改的地方就可以确认是否应该上传
$ git status 查看状态 文件修改过,可以上传
$ git status
On branch master
nothing to commit, working tree clean 没有需要提交的修改,工作目录是干净的,
工作目录?工作目录没有任何修改或者修改都被提交之后就是干净的
$git log 查看日志
$git log --pretty=oneline 精简日志
$ git reset --hard HEAD^ 退到上一个版本 HEAD^^ 上上个版本
$ cat demo.txt 查看文本内容
$ git log 最末尾的log被删除 无法回退?
$ git reset --hard 1094a 命令行没关闭,查找comment id
$ git reflog 记录的所有的操作 就可以回退
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,
使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
当前的 learninggit 就是工作区
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,
还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:
git 进程冲突 删除 index.lock 和 一个 .git/COMMIT_EDITMSG
Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,
所以它的状态是Untracked。 新建的没被添加add的文件都是 UNtracked
commit 之后 暂存区就为空,这个暂存区就是干净的那个工作目录
git checkout <flie> 退回到上一个状态
只修改 不add 没添加到暂存区 staged area
checkout 之后回退到未修改状态 丢弃工作取得修改
not staged add之后修改没有commit
untracked 修改没有add
修改的两种情况
没添加到暂存区的修改 111 -change-> 222
ckeckout 111 [文件会被修改]
添加到暂存区之后的修改 111 -add-> 111 -change-> 222
ckeckout -add->111
[文件会被修改]
先修改,再add 添加到了暂存区 还没提交
git reset HEAD <file>可以把指向暂存区的修改撤销掉(unstage),
重新放回工作区:
git checkout -- <file>可以把指向暂存区的修改撤销掉(unstage),
重新放回工作区:
但是文本内容不变了,而且再次使用并不能退回到上一级
3.删除工作区文件和版本库文件
删除文件
rm 只有commit 之后才能恢复
git rm 删除版本库的文件
或者回复本地文件
从来没有被添加到版本库就被删除的文件,是无法恢复的!
GIT 仓库是一个本地仓库 可以上传到远程仓库
4.连接到远程仓库
$ git remote add origin https://gitee.com/scobiser/first_demo.git
这个origin是自己取的远程仓库名
origin --》https://gitee.com/scobiser/first_demo.git
一个仓库名对应一个地址[连接]
5.推送到远程仓库的分支
$ git push origin master 主分支
$ git push origin maste:1 1分支
由于远程库是空的,我们第一次推送master分支时,
加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,
在以后的推送或者拉取时就可以简化命令。
要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令
git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,
就可以使用命令
git push origin【仓库名】 master【分支名】
推送最新修改;
6.clone 全部操作
找个文件夹使用clone命令
$ git clone https://gitee.com/scobiser/first_demo.git
$ git add .
$ git commit -m “text”
$ git push 不用再写仓库名了 也不用写分支
第一次上传直接 git push 是不行的 要指定仓库分支
7.远程仓库删除和绑定
本地仓库切换连接对象
git remote -v 查看连接信息
git remote rm origin【仓库名】 删除远程连接仓库
git remote add gitee【仓库名】 git@gitee.com:liaoxuefeng/learngit.git
添加到分支
git push gitee master
8.一个远程仓库地址是不能作为两个本地仓库的连接对象的
给一个已经连接了本地仓库的远程仓库连接另一个本地仓库就会出现这种问题
比如
Administrator@X6X8-20181228BO MINGW64 /d/learnGit/second_demo (master)
$ git push hhhh master
To https://gitee.com/scobiser/first_demo.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to ‘https://gitee.com/scobiser/first_demo.git’
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push --help’ for details.
所以,一个地址对应一个仓库
9 查看,新建,切换分支
$ git branch 查看本地分支
- master
$ git branch -r 查看远程分支
origin/1
origin/HEAD -> origin/master
origin/master
创建分支
$git branch <分支名>
切换分支
$git checkout <分支名>
现在就可以在新分支上add commit了
1)没有git add .
2)没有git commit -m “提交信息”
如果上面两个步骤都成功执行,还出现这个错误是因为创建的目录下是空的,目录下必须有文件才能git push上传成功。
在github上创建文件的时候,在新文件名后加/符号就是文件夹,但是这种方式只支持英文名目录,中文名目录不支持。
10 分支合并
git checkout master 先切换到master
git merge <分支名 假设叫br1>
将br1的修改合并到master上 ,但是此时br1本身并未发生改变、,只是将他的修改合并到master上
其他分支的修改只能merge到master上
11分支删除 本地/远端
git branch -d <分支名> 本地删除
$ git push origin --delete <分支名> 远端删除
查看分支
$ git branch
* master
新建分支
$ git branch br1
查看分支
$ git branch
br1
* master
切换分支
$ git checkout br1
D text.txt
Switched to branch 'br1'
查看状态
$ git status
添加所有文件到暂存区
$ git add .
查看分支
$ git branch
* br1
master
提交到分支br1
$ git commit -m "ssss"
[br1 be67496] ssss
1 file changed, 0 insertions(+), 0 deletions(-)
rename text.txt => 1.txt (100%)
错误
$ git push
fatal: The current branch br1 has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin br1
错误
$ git push br1
fatal: 'br1' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
切换到分支master
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
将分支br1的改变覆盖master分支
$ git merge br1
Updating b77dbb0..be67496
Fast-forward
text.txt => 1.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename text.txt => 1.txt (100%)
查看状态
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
推送
$ git push
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 264 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
remote: Powered By Gitee.com
To https://gitee.com/scobiser/first_demo.git
b77dbb0..be67496 master -> master