git本地库操作
一、版本管理
1 2 3 4 5 6 7 8
| 1. 查看仓库当前的状态 git status 2. 查看修改内容 git diff 注:git diff HEAD -- readme.txt 可以查看工作区和版本库里面最新版本的区别 3. 查看提交日志 git log, git log --pretty=oneline 注: --pretty=oneline 参数简化输出,还可以带上文件名,专门指这个文件的修改历史
|
在 git 中,使用 HEAD 表示当前版本,也就是最新的提交。上一个版本就是 HEAD^,同理,上上一个版本就是 HEAD^^。上上100个版本可以写成 HEAD~100 。
1 2 3
| 1. 版本回退(回退到上一个版本) git reset --hard HEAD^ git reset --hard 1094a # 回退到某个版本
|
版本前进,回退版本操作失误,此时
1 2 3 4
| 1. 查看使用过的命令 git reflog 可以看到提交过的commit id git reset --hard commit_id
|
二、修改&撤销
git add 命令实际上是把提交的所有修改放到暂存区(stage),然后,执行 git commit 就可以一次性把暂存区的所有修改提交到分支。
1 2 3 4 5 6
| 如果您还没有 git add 到暂存区,想要丢弃此时的修改,可以使用: git checkout -- file 这里有两种情况 1. file 自修改后还没有添加到暂存区,现在,撤销修改就回到和版本库一模一样的状态 2. file 已经添加到暂存区,又做了修改,现在,撤销修改就回到添加到暂存区时的模样 总之,就是让文件回到最近一次 git commit 和 git add 时的状态
|
1 2 3 4 5 6
| 如果您已经 git add 到暂存区了,在 git commit 之前,想要丢弃修改,可以使用: git reset HEAD file 注意:git reset 既可以回退版本,也可以把暂存区的修改回退到工作区。使用HEAD时,表示最新的版本 使用 git status 查看,会发现暂存区时干净的,工作区有修改 此时再丢弃工作区的修改,就回退到原始了 git checkout -- file
|
1 2 3
| 如果您已经 git commit到分支了,那就直接版本回退 git reset --hard commit_id 如果您已经git push 到远程分支了,那就先在本地版本回退,然后push 到远程仓库 带上 --force
|
1 2 3 4 5
| 删除文件 如果你在工作区删除了文件,此时工作区和版本库就不一致了。 如果确定要从版本库中删除该文件,就可以使用 git rm 删除,并且 git commit git rm file; git commit -m "remove file" 如果工作区里的文件删错了,那版本库中还有,直接 git checkout -- file 即可。
|
注:git checkout 其实就是用版本库中的版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原
三、从远程库到本地库
git clone、git pull、git fetch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 1. git clone git clone <版本库的url> git clone <版本库的url> <本地目录名> # 如果本地目录不想与远程仓库同名,可以自定义本地目录名 git clone --recursive [address] # 可以将子项目一起 clone 下来
2. git pull # 拉取远程分支更新到本地仓库。git pull 相当于从远程仓库获取最新版本,然后再与本地分支 merge 因此:git pull = git fetch + git merge git pull <远程主机名> <远程分支名>:<本地分支名> 举例:将远程主机 origin 的 master 分支拉取过来,与本地的branchtest 分支合并: git pull origin master:branchtest 如果将冒号和后面的 branchtest 去掉,则表示将远程 origin 仓库的master 分支拉取下来与本地当前分支合并
3. git fetch 更新远程代码到本地仓库 在 .git/FETCH_HEAD 文件中,其中每一行对应于远程服务器的一个分支。FEICH_HEAD 指的是:某个branch在服务器上的最新状态 当前分支指向的 FETCH_HEAD,就是这个文件第一行对应的那个分支。一般存在两种情况 1). 如果没有显式的指定远程分支,则远程分支的 master 将作为默认的 FETCH_HEAD 2). 如果指定了远程分支,就将这个远程分支作为 FETCH_HEAD git fetch 更新本地仓库的两种方法 1). git fetch origin master # 从远程的 origin 仓库的 master 分支下载代码到本地的 origin master git log -p master.. origin/master # 比较本地的仓库和远程仓库的区别 git merge origin/master # 把远程下载下来的代码合并到本地仓库,远程和本地的合并 2). git fetch origin master:tmp # 从远程的 origin 仓库的 master 分支下载到本地并新建一个分支 temp git diff temp # 比较 master 分支和 temp 分支的不同 git merge temp # 合并 temp 分支到 master 分支 git branch -d temp # 删除 temp
|