基础命令
查看仓库当前状态
git status
查看修改内容
git diff
-
要随时掌握工作区的状态,使用
git status
命令。 -
如果
git status
告诉你有文件被修改过,用git diff
可以查看修改内容。
查看版本历史记录(HEAD)表示当前版本
git log --pretty=oneline
回退到指定版本(HEAD~1表示回退一个版本)
git reset --hard HEAD~1
回到指定的版本(需要指定版本号)
git reset --hard 4c8ab(版本号前几位)
-
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。 -
穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。 -
要重返未来,用
git reflog
查看命令历史,以便确定要回到未来的哪个版本。
当你把暂存区的文件 commit 提交之后,你对工作区又没有任何修改,那么工作区就是“干净的”,每次修改,如果不用git add
到暂存区,那就不会加入到commit
中。
当你想撤销修改而且没有提交到暂存区的时候
git checkout -- readme.txt
当你想撤销修改但是已经提交到暂存区的时候
git reset HEAD readme.txt
git checkout -- readme.txt
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
误删文件时可以执行
git checkout -- test.txt
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!
git克隆指定分支
git clone -b 分支名 仓库地址
远程仓库
把本地仓库的内容添加到GitHub仓库(前提是GitHUb的SSH公钥已经配置好了)
git remote add origin git@github.com:laoshiquan/learngit.git
git push -u origin master
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令
git push origin master
把本地master
分支的最新修改推送至GitHub。
如果想要删除远程库(实际上是解除本地与远程库的联系),先执行查看远程库信息
git remote -v
再删除
git remote rm origin
注意:要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。
Git支持多种协议,包括https
,但ssh
协议速度最快。
BUG分支
应用场景:当你在dev分支上的工作进行一半,突然很急要改一个master上的bug时,你可以使用git的暂存功能来保留你的工作现场
(1)保留工作现场
git stash
(2)切换master分支并创建临时分支
git switch master
git switch -c fix-bug
(3)修改master分支上的bug并提交
git add .
git commit -m "fix-success"
(4)切换到master分支,合并分支,删除临时分支
git switch master
git merge --no-ff -m "合并临时分支到master" fix-bug
git branch -d fix-bug
(5)切换回dev分支,找出之前的工作现场,选择一个现场并进入现场
git switch dev
git stash list
git stash apply stash@{0}
git stash
(6)复制之前修改过的临时分支到dev分支
git cherry-pick f3ab7a0(临时分支提交的修改)
如果要丢弃一个没有被合并过的分支,可以强行删除
git branch -D <name>
多人协作
-
首先,可以试图用
git push origin <branch-name>
推送自己的修改; -
如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; -
如果合并有冲突,则解决冲突,并在本地提交;
-
没有冲突或者解决掉冲突后,再用
git push origin <branch-name>
推送就能成功!
注意:如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令设置dev
和origin/dev
的链接。
git branch --set-upstream-to=origin/dev dev
只提交部分文件
// 添加需要提交的文件名(git status)
git add src/xxxxxxxx
// 忽略其他文件,把现修改的隐藏起来,这样提交的时候就不会提交未被add的文件
git stash -u -k
git commit -m "create"
// 拉取要合并的分支
git pull --rebase origin dev
// 解决冲突
git add.
git commit -m "create"
// 切换分支
git checkout -b dev
// 选择要提交的分支提交
git push origin dev
// 恢复之前忽略的文件
git stash pop