Git01

205 阅读5分钟

理解工作机制


  1. 文件夹下:工作区-WorkingDirectory & 版本库-Repository(暂存区 和 master分支)(从工作区到版本库的暂存区git add . ; 从暂存区到本地master分支:git commit -m '备注信息')
  2. git历史版本
git log (如果想一行显示:git log --pretty=oneline)

特点:从上到下,由近及远!!!!


版本回退>>

 git reset --hard HEAD^     //回退到上一个版本   
 ### 注意:版本回退后到上一次后,关闭命令行窗口,若再次运行git log ,你发现回退前的那个commit id 已经不见了!!!咋办??
 ### 别着急,git给你了一粒后悔药
 git reflog                //用来记录你的每一次命令

### 总结:git log 是提交历史; git reflog 是命令历史; HEAD是当前版本,故:git reset --hard commit_id就是回退到某个版本

撤销修改>>

git checkout -- <file>      //让这个文件回到最近的一次git commit 或 git add 时的状态 (这是对文件内容的一种撤销操作)
### (理解checkout eg:checkout time 退房时间:checkout有种'退'的味道)切记:-- 很重要,没有--就变成了切换分支了!!!!
### 注意:若是 git add file 之后又做了修改,使用git checkout -- file是回退到git add file时,修改前的状态。
如果想回退到工作区???
git reset HEAD <file> 可以把暂存区的修改撤销,放回到工作区,再用 git chekcout -- <file> 让世界变得清净!!!
(你看:git reset 既可以版本回退,又可以撤销修改)

分支是啥?

1. 分支是一条时间线。git add . git commit 后,为时间线增加了一个节点。git log查看时间线的由近及远的节点。git reflog查看操作命令由近及远的节点。说到底,git用时间线管理修改。

2. master指向最新的提交的那个节点。而HEAD指向master
3. 当我们新建分支dev时,其实新建了一个指针dev,默认指向master所指向的那个最新的提交的节点。再把HEAD指向dev,表示当前在分支dev上

创建分支

1. git checkout -b <分支名> eg: git checkout -b dev  //该命令是创建并切换分支 (相当于:git branch dev ; git checkout dev两条命令。)
2. 查看分支 git branch  ; 新建一个分支 :git branch dev; 切换分支: git checkout dev;
3. 删除分支: git branch -d <分支名>
4. git log  --graph 可以查看分支合并图
5. 如何禁用fast-forward模式:git merge --no-ff -m 'merge width no-ff' dev
6. 查看分支合并图:git log --graph --pretty=oneline --abbrev-commit(从下图可以看出,采用--no-ff模式合并,会多一次提交记录。方便查询。)建议合并时采用这种方式合并 git merge --no-ff -m '备注' <被合并的分支名>

工作中的临时修复bug

1. 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
2. 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
3. 在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit_id>命令,把bug提交的修改“复制”到当前分支,避免重复劳动

开发新功能

1. 开发一个新feature,最好新建一个分支;
2. 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

推送分支

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
1. git push origin master
如果要推送其他分支,比如dev,就改成:
2. git push origin dev

多人协作

1. 拉取远程dev分支代码后要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
git checkout -b dev origin/dev    (注意:此时远程库必须是有dev分支的,不然报错哦)
2.推送至dev
git push  origin dev
3.将本地dev分支和远程dev分支建立关联
git branch --set-upstream-to=origin/dev dev
###
首先,可以试图用git push origin <branch-name>推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,
用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。

### 总结
1. 查看远程库信息,使用git remote -v;
2. 本地新建的分支如果不推送到远程,对其他人就是不可见的;
3. 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
4. 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
5. 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
6. 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。