Git Fundamentals
远程仓库(remote)
基本信息(-v)
载入远程仓库后,可使用 git remote -v 然后查看信息。可以看出,origin 就是远程仓库位置:
$ git clone https://github.com/tianqixin/runoob-git-test
$ cd runoob-git-test
$ git remote -v
origin https://github.com/tianqixin/runoob-git-test (fetch)
origin https://github.com/tianqixin/runoob-git-test (push)
可以使用 git remote show [remote] 查看当前远程仓库信息:
$ git remote show
origin
$ git remote show origin
* remote origin
Fetch URL: git@git.tsinghua.edu.cn:guyc19/git-test.git
Push URL: git@git.tsinghua.edu.cn:guyc19/git-test.git
HEAD branch: master
Local ref configured for 'git push':
master pushes to master (up to date)
添加(add)、删除(rm)、重命名(rename)
添加远程版本库,shortname 为版本库名称:
git remote add [shortname] [url]
其他命令:
git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名
分支(branch)
创建分支的操作只是创建一个新的指针,这一过程并不会对仓库进行任何修改。
基本操作
执行下面的命令来创建一个分支:
git branch crazy-experiment
此时的仓库提交历史没有任何变化。你得到的仅仅是指向当前 commit 的一个新指针。
此时你只是创建了这个分支。如需开始对新分支进行提交,要先选择这个新的分支,使用 git checkout 命令,然后再使用标准流程 git add 、git commit 等命令。
列出、创建、切换与删除分支
创建分支 git branch testing:
$ git branch
* master
$ git branch testing
$ git branch
* master
testing
切换到分支 git checkout testing(当前工作区会发生变化):
$ git checkout testing
Switched to branch 'testing'
也可以使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下。
删除分支:
git branch -d (branchname)
合并分支
使用以下命令将任何分支(或全部分支)合并到当前分支中去:
git merge (branchname)
合并完后就可以删除分支。
合并冲突
当出现合并冲突时,会出现以下提示:
$ git merge change_site
Auto-merging runoob.php
CONFLICT (content): Merge conflict in runoob.php
Automatic merge failed; fix conflicts and then commit the result.
会自动将出现冲突的提示信息添加到文件中,便于修改。需要手动修改文件内容,实现合并操作,最后 git commit 提交更改即可。
版本提交与远程推送
查看版本变化(diff)
git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。
显示暂存区和工作区的差异:
$ git diff [file]
显示两次提交之间的差异:
$ git diff [first-branch]...[second-branch]
修改状态(status)
git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。通常我们使用 -s 参数来获得简短的输出结果:
$ git status -s
AM README
A hello.php
AM 状态的意思是这个文件在我们将它添加到缓存之后又有改动(added、modified)。
添加到暂存区(add)
git add 命令可将该文件添加到暂存区。
添加一个或多个文件到暂存区:
git add [file1] [file2] ...
添加指定目录到暂存区,包括子目录:
git add [dir]
添加当前目录下的所有文件到暂存区:
git add .
提交到本地仓库(commit)
git commit 命令将暂存区内容添加到本地仓库中。
提交暂存区到本地仓库中([message] 可以是一些备注信息):
git commit -m [message]
提交暂存区的指定文件到仓库区:
git commit [file1] [file2] ... -m [message]
可以使用以下命令一次执行添加和提交操作(相当于 git add .):
git commit -am [message]
远程推送(push)
git push 命令用于从将本地的分支版本上传到远程并合并。命令格式如下:
git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
使用 git push -u ... 可以指定推送的仓库位置,以后使用 git push 即可。
撤销修改
回退工作区代码
适用:在上一次提交后的修改还未添加到暂存区,不想保留。
git checkout [FILENAME] 即可撤销修改。
回退暂存区代码
适用:已经使用
add进行暂存,但希望撤销。
包括以下两步:
- 将暂存区的代码撤销到工作区:使用
git reset HEAD命令来实现(具体见下面)。 - 将工作区的代码撤销(见上一节)。
回退本地仓库代码
适用:已经使用
commit提交,希望回退。
利用 git reset --hard <VERSION> 命令来实现版本回退(具体见下面)。
重置(reset)
这里的 git reset 命令可用以下的参数:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,就是把暂存区放入工作区;--soft会保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。--hard参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交(不会删除代码的提交,尽量不用):
$ git reset --hard HEAD~3 # 回退上上上一个版本
$ git reset --hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
使用 HEAD 表示版本号:
HEAD表示当前版本HEAD^上一个版本HEAD^^上上一个版本HEAD^^^上上上一个版本- 以此类推…
还可以使用 ~数字 表示:
HEAD~0表示当前版本HEAD~1上一个版本HEAD~2上上一个版本HEAD~3上上上一个版本- 以此类推…
版本号也可以通过 git log 查看所有的历史版本,进行定位。
重置后的恢复
可以使用 git reset <VERSION> 恢复到任意一个版本号。可通过 git reflog 查看之前用过的 git 命令,定位版本号。
参考资料
- https://zhuanlan.zhihu.com/p/461090867
- https://www.runoob.com/git/
- https://blog.csdn.net/weixin_39691748/article/details/113451662
- https://zhuanlan.zhihu.com/p/79686518?ivk_sa=1024320u