面向小白的Git教程

蕞蕞蕞白痴的用法

以Github为例(默认已经安装了Gitbash):

首先创建一个repo,

Untitled

在你的某个文件夹打开Gitbash:

1
git clone https://github.com/HaCTang/Code.git 

如果遇到下面的问题:

1

请打开魔法!

正常情况下是:

此时会得到一个Code文件夹,这不是普通的文件夹,进入,输入ls -la,会发现有.git隐藏文件夹,里面就会有一些用户信息,commit信息等。

从Bash进入Code文件夹:

1
cd code // 总所周知gitbash不区分大小写((

拷入一些文件,例如:

Untitled

然后:

1
git add .

接着:

1
git commit  -m  "提交信息" //(提交的信息是你的项目说明)

最后输入(可以通过 git status查看当前在哪个branch):

1
git push -u origin main // 分支的名称也可以在gitbash中直接看到

然后就可以在你的主页上看到上传的文件了。

进阶用法

提交到远程仓库的详细命令

git push <远程主机名> <本地分支名>:<远程分支名>
查看默认的远程主机名:git remote ,一般默认为origin
查看默认的本地分支名:git branch , 一般为master(主分支)
远程分支名:一般与本地分支名相同
查看所有远程分支:git branch -r

从远程仓库获取最新版本

git pull <远程主机名> <远程分支名>:<本地分支名>
多人开发时,先git pull拉取远程仓库中的其他人的修改,
合并到本地仓库之后再git push
如果本地仓库和远程仓库产生冲突,则需要手动修改

Git log:查看提交历史记录

git log 显示提交历史
git log –graph 显示提交历史并且分支合并信息
git log –author=xxx 显示某个作者所有提交信息

Untitled

Pull Request(PR):提交代码

Untitled

Git reset (慎用)

假设现在系统有两次正常提交(A和B),而C和D是错误提交。现在要把C和D去掉,而此时HEAD指针(当前最新版本)已经指向D。为此,我们要把HEAD指针移动到B。
运行命令:git reset (commit编号可以查看git log得到)

运行之后,HEAD指针会移动到B,但是本地的代码仍处在D的状态。要想把代码也改为B的状态,需要git reset –hard

  • 慎用–hard , 未提交(commit)的修改不能被恢复!

在本地执行git reset (–hard)后,远程仓库指针和代码仍然保持在D不变。若要更新远程仓库就需要强推:运行git push -f

  • 慎用-f ,远程仓库会失去所有C和D的信息
    若要找回D的信息,可运行git reflog 找到reset操作对应的D版本号,重新git reset回去。然后可以重新git push到远程

分支管理

何时需要多分支?——稳定分支和开发分支;多人协同,分别写各自的模块

git branch 查看所有分支和当前分支

git checkout 切换到某个分支

——切换之前要保证工作区没有尚未提交的修改,否则会报错。

——可以git add并且git commit提交所有修改 / git stash暂存修改 / git reset –hard删除修改

git checkout -b 从当前状态新建分支并切换过去

git branch -d 删除分支

git checkout 还原某个文件的修改(checkout的另一个作用)

——和git reset–hard一样,不能恢复!

git stash 暂存修改

——做完push/checkout等操作后,可以git stash pop还原修改(弹出暂存)

想要还原代码怎么办:Revert

首先,运行git revert 5lk4er,创建D’,抹去D的影响
其次,运行git revert 76sdeb,创建C’,抹去C的影响
这样操作的话,保留了C和D的信息,HEAD指针是往前移动的,因此可以直接使用git push命令推动到远程仓库里,一般是鼓励使用的

Cherry-Pick

假如有三个提交,中间B是错误提交,但是C是正确提交,如何处理?
git revert命令先把 C 提交和B 提交全部回退,再使用 cherry-pick 命令将 C 提交重新再生成一个新的提交 C’’,这样就实现了将B提交回退的需求。

运行命令:git cherry-pick 76sdeb

Untitled

总结

Untitled