本文已参与「新人创作礼」活动,一起开启掘金创作之路
主要将本文分为两个部分,一是git的基础知识,二是git较难的部分-分支管理的知识
基础知识
- 初始化一个Git仓库,使用
git init命令。 - 添加文件到Git仓库,分两步:
- 使用命令
git add <file>,注意,可反复多次使用,添加多个文件; - 使用命令
git commit -m <message>,完成。
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。- 穿梭前,用
git log可以查看提交历史,以便确定要回退到哪个版本。 - 要重返未来,用
git reflog查看命令历史,以便确定要回到未来的哪个版本 - 要随时掌握工作区的状态,使用
git status命令。 - 如果
git status告诉你有文件被修改过,用git diff可以查看修改内容。 转存失败重新上传取消
- 这里删除的是文件区的文件
$ rm test.txt
这里删除的是版本库的文件
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
-
git log 可以查询修改记录 如果嫌输出信息太多,
$ git log --pretty=oneline
看得眼花缭乱的,可以试试加上--pretty=oneline
-
$ git reset --hard HEAD^上一个版本就是
HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100 -
最新的那个版本已经看不到了,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个你要的版本的
commit id是1094adb...,于是就可以指定回到未来的某个版本:
$ git reset --hard 1094a
在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到老版本版本时,再想恢复到新版本,就必须找老版本的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支(个解:暂存区就是保留各种修改记录)
分支管理
分支管理
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。
修改bug
1.Git还提供了一个stash功能,可以把当前工作现场“储藏”起来
git stash
2.确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
git checkout master
git checkout -b xxx
3.修复bug
4.切换回主支线并合并
git checkout master
git merge --no-ff -m"注释"xxx(被合并分支)
5.回去分支工作
- git stash list 可以查看最初隐藏的工作现场
恢复:1。git stash list 回复后stash的内容并不会被删除 删除使用git stash drop
2.git stash pop 恢复时 stash的内容也会被删除
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
多人协作
1.查看远程库:git remote
origin/git remote -v(详细版本)
2.推送分支:git push origin xxx
3.提交冲突时,用git pull把最新提交抓下来,解决冲突再推送
4.没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功
5.如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
Rebase
暂时没学透彻
分支
- 命令
git push origin <tagname>可以推送一个本地标签; - 命令
git push origin --tags可以推送全部未推送过的本地标签; - 命令
git tag -d <tagname>可以删除一个本地标签; - 命令
git push origin :refs/tags/<tagname>可以删除一个远程标签。