git入门
0.git 的本地仓库由三个部分组成:
1)workDir 工作目录【 实际持有文件;
2)Index 暂存区【 使用 git add 添加文件至暂存区
3)head 【 保存着本地最后一次提交(commit)的代码结果
1.使用 git clone 将远端的项目克隆到本地
git clone https://github.com/Oligocalse…
// 如果要拉取一个远端上新创建的分支,则需要在本地先 git pull
// 然后再使用 git checkout 本地分支名x origin/远端分支名x
2.克隆到本地后,命令行中切换文件目录,并切到开发的分支
cd project/gitTest
git branch
//查看现在的分支,刚clone下来的项目默认在master分支
git checkout -b gitTest/0614 origin/gitTest/0614
//从远端gitTest/0614分支新建一个分支到本地,并建立映射关系【跟踪分支
//这样的话,以后在拉取或者提交代码时,可以直接使用 git push 或者 git pull
使用如下命令:
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
3.开发完成后,可以先查看修改了哪些文件以及他们的状态,可以选择添加至暂存区,然后提交、推送代码
git status // 查看状态
// 也可以使用 git staus -s 查看精简状态
// A前缀表示 新添加到暂存区的文件
// M前缀表示 修改过的文件
M 出现在左边的表示该文件被修改了,并将修改后的文件放到了暂存区
M 出现在右边的表示该文件被修改了,但是还没有放到暂存区
MM 表示文件在工作区被修改了并且放到了暂存区,但是又在工作区被修改了,所以在暂存区和工作区都有该文件被修改的记录
// ??前缀表示 新添加的未跟踪文件
git add readme.txt // 添加一个文件
git add readme.txt readhim.txt // 添加多个文件
git add . // 添加全部文件
// 添加完成后,将文件 commit ,在 commit 时 ,添加备注
git commit -m”initial readme”
//commit 之后,就可以使用 git push 直接提交
// 如果要将本地新创建的分支推送到远端,需要使用
git push origin new_branch:new_branch
// 也可以在push的时候床架与远端分支的跟踪关系
git push -u origin new_branch
4.拉取代码
使用 git pull origin <远端分支名> 拉取代码
如果本地分支与远端分支存在跟踪关系,可以直接使用 git pull
如何创建跟踪关系:
git branch --set-upstream-to=origin/remote_branch your_branch
5.回滚到特定版本
在自己分支需要回滚的话,可以使用git reset (默认使用git reset –mixed),
后跟需要撤销的commit的前一次的Id,但是只是撤销commit,不会删除之前修改的代码,并且不会产生回滚记录。
先使用 git log 查看日志
// 可以使用 git log -p –word-diff 查看单词层面的对比
然后使用 git reset –hard <commit_id> // 强制恢复到某个版本,workDir 和 index 的代码全部回滚并修改 head 的指向
// git reset –mixed 撤销commit 和 add ,只保留 workDir 中的修改的代码
// git reset –soft 也是类似的回滚功能,但是它只是修改了 head 的指向,不会删除已经add和workDir中的代码
可以使用 git reflog 查看之前的全部commit_id,方便在回退或者撤销回退的时候找到id
如果不小心回滚错误导致文件丢失,可以使用 git fsck –lost-found 。这里是具体链接
tips:最好修改完一个功能之后就add + commit ,并且 commit 的时候要写清楚备注
6.公共远端分支回退版本
在远端公共分支需要回滚时,现在本地使用git revert ,然后提交到远端自己的分支,再提交一个MR。
git revert 用于撤销某次commit,后面跟的commit_id是需要撤销的commit 的 id,
使用 git revert HEAD 用于撤销最近一次commit ,如果最近一次commit 是revert产生的,再次使用git revert HEAD 的时候就相当于撤销了之前的撤销操作,相当与没有执行过git revert HEAD
如果 git revert 撤销的不是最近一次的commit ,大概率出现冲突,需要手动merge,将当前的代码删除,保留之前版本的代码。
git revert 命令的好处就是不会丢掉别人的提交,即使你撤销后覆盖了别人的提交,他更新代码后,可以在本地用 reset 向前回滚,找到自己的代码,然后拉一下分支,再回来合并上去就可以找回被你覆盖的提交了。
7.代码合并
当前存在 A , B 两个分支,需要将 B 分支上的内容合并到 A 分支上 。
1.git checkout A // 切换到 A 分支
2.git merge B // 与 B 分支合并
如果在 merge 的时候出现冲突,
1).决定不合并,这时,唯一要做的就是重置index到HEAD节点。git merge --abort用于这种情况。
2).使用工具合并 , git mergetool
3).在文件中直接修改
// 从远端拉取新代码到本地
//查询当前远程的版本
$ git remote -v
//获取最新代码到本地(本地当前分支为[branch],获取的远端的分支为[origin/branch])
$ git fetch origin dev [示例2:获取远端的origin/dev分支]
//查看版本差异
$ git log -p dev..origin/dev [示例2:查看本地dev与远端origin/dev的版本差异]
//合并最新代码到本地分支
$ git merge origin/dev [示例2:合并远端分支origin/dev到当前分支]
// 如果出现冲突,则在IDE中解决冲突并add commit即可。
本地分支 clerk_cqf_0614 有修改并commit 的代码,但没有push ,此时需要与另个新分支合并,
则 首先 git fetch origin xxxx,
然后 git checkout xxxx,
git merge clerk_cqf_0614,
在合并完成之后,如果没有冲突,则之前在clerk_cqf_0614 的commit 记录也会添加到 xxxx 分支上
8.复制本地分支
git checkout -b new_branch old_branch
9.重命名一个文件夹或者将A文件夹的内容移动到B文件夹的需求
git mv src/pages/a src/pages/b
如果直接自己在目录中新建一个文件夹,再复制粘贴操作的话,会导致之前关于a文件夹的commit记录消失。
但是使用git mv 的话,会将a文件夹的提交记录转移到b文件夹下。
10.重命名本地分支
git branch -m old_branch new_branch
// 如果需要重命名远端分支,则需要先重命名本地分支,再使用
git push origin:the_branch_you_want_rename
// 上面的命令用于删除远端某分支,在删除之后,将本地重命名之后的新分支推送到远端
git push origin the_branch_you_want_push
git cherry-pick : https://blog.csdn.net/amanics…