参考廖雪峰大佬的Git教程以及个人开发经验,所作总结。
可以收藏起来、加入浏览器书签,作为参考。高效操作Git命令,管理好我们的代码。
一、添加文件到Git仓库
初始化一个Git仓库,使用git init
命令。
添加文件到Git仓库,分两步:
使用命令git add <file>
,注意,可反复多次使用,添加多个文件;git add .
将文件全部添加到暂存区
使用命令git commit -m <message>
,完成。
注释错了,还可以修改,修改最后一次提交的注释:
git commit --amend -m "新的提交信息"
二、工作区的状态
要随时掌握工作区的状态,使用git status
命令。
如果git status告诉你有文件被修改过,用git diff
可以查看修改内容。$ git diff HEAD -- readme.txt
工作区、版本库、暂存区的理解,请看另一篇博文:https://blog.csdn.net/aaqingying/article/details/99716563
三、版本回退
现在总结一下:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,
使用命令git reset --hard commit_id
。(commit_id是版本号)
穿梭前,用git log
可以查看提交历史,以便确定要回退到哪个版本。
git log
命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:$ git log --pretty=oneline
要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。
四、管理修改
你可以继续git add
再git commit
,也可以别着急提交第一次修改,先git add第二次修改,再git commit,就相当于把两次修改合并后一块提交了:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit -m "…"
好,现在,把第二次修改提交了,然后开始小结。
每次修改,如果不用git add到暂存区,那就不会加入到commit中。
五、撤销修改小结
手动修改工作区之后,发现写错。还未add添加修改。
使用命令:git checkout -- file
可以丢弃工作区的修改:
$ git checkout -- readme.txt
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
手动写错工作区某个文件的内容,并add到暂存区了,还没有执行commit命令。
用命令git reset HEAD <file>
撤销(unstage)暂存区的修改,再使用$ git checkout -- readme.txt
丢弃工作区的修改,OK了,已撤销修改。
已经commit提交了不合适的修改到版本库时,想要撤销本次提交,不过前提是没有推送到远程库。Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
进行版本回退,回退之前可以使用git log命令显示从最近到最远的提交日志 。 git log --pretty=oneline 显示在一行。
commit之后可以再次add一次,再commit -amend 覆盖之前的提交。或者参考上面第四节,先add再commit
git add <file>
git commit -amend
六、删除文件
- 如果是手动删除工作区的文件,删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
(git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。经我测试,这个方法只可以用于手动删除了工作区的文件,如果是用git rm file
命令删除的这种方式恢复不了) $ git rm flie
只删工作区的文件,版本库未删。
- 如果确实要从版本库中删除该文件,那就用命令
git rm
删掉,并且git commit -m "details:..."
; - 如果是误删,要从版本库恢复,前提是没有推送到远程库。我们可以在版本的历史之间穿梭,使用命令
git reset --hard commit_id
进行版本回退。回退之前可以使用git log命令显示从最近到最远的提交日志 ,查看到commit_id。 git log --pretty=oneline 显示在一行。
-
不该add到暂存区的文件,却add并commit了,使用
git rm --cache <file>
进行删除。 -
已经远程的的项目文件.
- 需要输入命令
git pull origin master
把github上的文件重新拉下来;$ dir查看目录下的文件; - 输入命令
git rm -r --cached readme.txt/文件夹名
删除磁盘上的readme.txt文件(也可以手动删除), - 再输入命令
git commit -m '删除了readme.txt'
提交添加说明; - 最后
git push -u origin master
更新远程Github仓库
七、添加远程库
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.gi
t;
$ git remote add origin git@github.com:chenzhengwin/仓库名.git
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了
八、从远程库克隆
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone 命令克隆。git clone +地址
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
九、分支命令(重要!!!)
Git鼓励大量使用分支:
查看远程仓库位置:git remote -v
查看本地分支:git branch
带有“*”号的表示当前分支
查看远程分支的情况:git branch -a
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
切换远程分支到本地, 本地分支名称叫v1 :git checkout -b v1 origin/v1
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
强制将master分支指向c1: git branch -f master c1
将HEAD向上移动一级:git checkout HEAD^
将HEAD向上移动两级:git checkout HEAD^^
将HEAD向上移动三级:git checkout HEAD~3
将其他分支的提交commit
合并(复制)到当前分支:git cherry-pick <commitId>
提交节点迁移:git rebase -i HEAD~4
将其他分支汇总到master分支上:git rebase <name>
用带参数的git log也可以看到分支的合并情况:git log --graph --pretty=oneline --abbrev-commit
分支树:git log --all --graph --decorate --oneline
解决冲突:就是把Git合并失败的文件,手动编辑为我们希望的内容,再提交。
十、git所在路径
$ where git
C:\Program Files\Git\mingw64\bin\git.exe
C:\Program Files\Git\cmd\git.exe