以下git命令只是本人学习过程的一个简单总结,想要详细学习git操作的童鞋,可查看廖雪峰老师的git教程,讲的非常详细,个人感觉受益匪浅。
yum install git
(此命令需要root权限执行)./config
make
make install
mkdir learngit
在想要存放git的目录下创建文件夹,用于存放文件
注: 若你使用的是window系统,为避免各种各样奇怪的问题,请确保各级目录名不包含中文
cd learngit
切换到新创建的目录learngit下
git init
通过git init 命令把当前目录变成git可以管理的仓库
这时候会发现当前目录下多了个.git目录,这个目录是git跟踪管理版本库的。如果未看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见了。
git add readme.txt
新建文件readme.txt,并添加到版本库
git commit -m "add readme file"
提交文件
若添加成功,则表示仓库创建成功并且可以正常使用啦
git add file
把文件修改添加到暂存区,可反复多次使用,添加多个文件
git commit -m 'msg...'
把暂存区的所有内容提交到当前分支,并可以添加本次提交的说明
注:① 这里可以顺便了解下git工作区和暂存区概念,会更清晰的:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000
② Git跟踪并管理的是修改,而非文件。比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。
因此,当执行如下流程的操作过程时,第二次修改的是是不会被提交的,因为在工作区的第二次修改并没有放入暂存区:
(1) 修改文件(第一次修改)
(2) git add … 提交文件 (将工作区第一次修改的文件提交到工作区)
(3) 再次修改文件 (第二次修改)
(4) git commit … (将缓存区的文件提交到版本库)
关于此问题的详情请参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374829472990293f16b45df14f35b94b3e8a026220c5000
git status
查看工作区状态,可随时掌握工作区的状态,可以知道文件是否被修改过
git diff filename
可以查看文件filename修改的内容
git diff HEAD -- filename
查看工作区与版本库中最高版本的区别
git log
查看历史修改记录,显示从最近到最远的提交日志
git log --pretty=oneline
只输出commit id(版本号),这是一个SHA1计算出来的16进制数字
git reset --hard HEAD^
回退到上一个版本
注:在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
git reset --hard commitid
还可以回到未来的某个版本
注:版本号没必要写全,前几位就可以了,Git会自动去找
git reflog
用来记录你的每一次命令,从中可以找到历史版本commit id,然后再git reset恢复
git checkout -- filename
撤销工作区的修改(此项只对未git add的文件有效,即修改还未提交到暂存区的)
git reset HEAD filename
在将工作区文件修改并git add到暂存区,且未commit之前,执行此命令,可撤销暂存区的修改,回到工作区,若还想撤销工作区的修改,则再执行git checkout –file即可
git rm filename
从工作区中删除文件,相当于两步操作:rm filename 并且 git add filename
git commit -m 'someinfo...'
将删除动作提交到版本库,执行此命令后,版本库中的文件也将删除
注:① 若只执行了git rm filename命令之后,发现删错了,想恢复文件,需要执行以下两步操作来恢复已删除的文件:
git reset HEAD filename
撤销暂存区修改,清空add以后的暂存区
git checkout -- filename
撤销工作区修改,恢复文件filename,但要注意的是,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容
② git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
③ 若删除后并执行了git commit了,????
git remote add origin {远程库链接,例如https://github.com/huohuanyu/learngit.git}
关联远程库
git push -u origin master
关联后,第一次使用命令,将本地库master分支所有内容推送到远程库
git push origin master
以后,每次提交后,使用此命令推送最新修改
注:① 首先需要在github上创建一个新的仓库,创建好后会得到当前库的对应链接,比如我新建了learngit库,对应链接为:https://github.com/huohuanyu/learngit
② 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
详细添加远程库过程请参考https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013752340242354807e192f02a44359908df8a5643103a000
git clone {远程库链接,例如https://github.com/huohuanyu/gittest.git}
克隆一个本地库,执行后会看到当前文件夹下多了一个gittest的文件夹,cd进去就看到了和远程库一样的文件内容
git branch
查看分支,此命令会列出所有分支,当前分支前面会标一个*号
git branch
创建分支
git checkout
切换分支
git checkout -b
创建并切换分支
git merge
合并某分支到当前分支
git branch -d
删除分支
git branch -D
强行删除分支(在丢弃一个未合并过的分支时可以使用)
手动解决冲突后再提交,合并完成
git log --graph
查看分支合并情况,输出较为详细
git log --graph --pretty=oneline --abbrev-commit
查看分支合并日志,只输出commit id(版本号)
git merge --no-ff -m "xxx" dev
合并dev分支到当前分支,请注意–no-ff参数,表示禁用Fast forward。因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
注:合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
git stash
隐藏当前工作现场(等以后恢复现场后还可以继续工作)
git stash list
查看隐藏的工作现场
git stash apply
恢复工作现场,但恢复后stash内容并不删除,需要用git stash drop来删除
git stash pop
恢复工作现场的同时把stash内容也删除了
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
git remote
查看远程库信息
git remote -v
查看远程库信息(显示更详细)
git push origin branch-name
把该分支本地所有提交推送到远程库
git checkout -b branch-name origin/branch-name
在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致;
git pull
从远程抓取新提交的信息
git branch --set-upstream branch-name origin/branch-name
建立本地分支与远程分支的关联
注:多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name
推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name
推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name
。
git tag
新建标签,默认为HEAD,也就是打在最新提交的commit上的
git tag
新建标签,标签是打在指定的commitid上的
git tag
查看所有标签,标签不是按照时间顺序列出的,而是按照字母排序的
git tag -a
可以指定标签信息,用-a指定标签名,-m指定说明文字
git tag -s
可以用PGP签名标签
git show
查看标签信息
git tag -d
删除标签,创建的标签不会自动推送的远程,只是存储在本地,所以打错标签可以在本地安全删除
git push origin
推送某个标签到远程
git push origin --tags
一次性推送全部尚未推送到远程的本地标签
git push origin :refs/tags/
删除指定的远程标签,前提是需要先从本地删除 git tag -d
git remote rm origin
删除已关联的名为origin的远程库
git remote add github github远程库地址
关联github远程库,并指定库名为github
git remote add gitee
码云远程库地址 关联码云远程库,并指定库名为gitee
git remote -v
查看远程库信息,此时可以看到两个远程库
比如:保存了数据库密码的配置文件、
在git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,git就会自动忽略这些文件。
注:git已为我们准备好了各种配置文件,根据自己需要自动组合即可:https://github.com/github/gitignore
git add -f
用-f强制添加到git(在要提交的文件被.gitignore中的规则忽略时可以使用)
`git check-ignore -v 查看文件被.gitignore文件中的哪个规则忽略了
git config --global alias.别名 原名
例如:
git config --global alias.last 'log -1'
配置一个git last显示最后一次提交信息
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
配置指令git lg 按照指定格式输出分支合并情况
注:–global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用;是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用