Git学习
基本命令:
git add file
git commit -m "描述"
1、当commit到版本库之后,想要回退到修改前:
1)查看历史记录:
git log
--pretty=oneline 可以加上该参数简略输出
查看历史命令:
git reflog
2)回退到上一个版本:
git reset --hard HEAD^
用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,往上100个版本写成HEAD~100
。
2、管理、查看修改
查看工作区和版本库里最新提交的版本的差别:
git diff HEAD -- 文件
注意每次修改文件后,都需要git add到暂存区,commit提交时才是修改后的文件
或者等所有修改完再git add和commit
3、撤销修改
1)当把一个文件git add之后,在工作区再修改文件(这里修改之后有是否再次add的两种情况),想要撤销修改:
git checkout -- readme.txt
当readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
当readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
2)命令git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
4、删除文件
git rm
这里有点迷糊,暂时搁置
5、
查看远程库信息:
git remote
git remote -v
推送分支
git push 远程仓库名 本地分支名
添加远程仓库
git remote add origin git@github.com:用户名/仓库名.git
#ssh
git remote add origin1 https://www.github.com/用户名/仓库名.git
#https
删除远程仓库:
git remote rm 远程仓库名
推送本地库的所有内容到远程库:
git push -u origin master
或者
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/zwshi/test.git
git push -u origin master
多人协作的工作模式通常是这样:
- 首先,可以试图用
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>
。
6、分支
查看分支:git branch
git branch命令会列出所有分支,当前分支前面会标一个*号
创建分支:git branch <name>
切换分支:git checkout <name>或者git switch <name>
创建+切换分支:git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
git merge --no-ff -m "merge with no-ff" dev
查看合并历史
git log --graph --pretty=oneline --abbrev-commit
7、bug分支
保存现场
git stash
确定在那个分支进行修复bug(这里在one)
git checkout -b one
创建修复bug分支
git branch issue01
git checkout -b issue01
修复完成后切换到one分支,合并并删除issue01分支
git checkout one
git merge --no-ff -m "merge bug fix 01" issue01
切换为master分支
git checkout -b master
git staus
git stash list
恢复现场
git stash pop
在另一个分支修复同样的bug
同样的bug,要在dev上修复,我们只需要把4c805e2 fix bug 101这个提交所做的修改“复制”到dev分支。
注意:我们只想复制4c805e2 fix bug 101这个提交所做的修改,并不是把整个master分支merge过来。
为了方便操作,Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支:
$ git branch
* dev
master
$ git cherry-pick 4c805e2