git命令学习

基本操作

  • 初始化或者修改全局用户名:git config –global user.name “your name”
  • 初始化或者修改全局提交邮箱git config –global user.email “user@example.com
  • 添加到文件暂存区 git add <file.txt> 可添加多个文件,空格隔开
  • 提交文件到工作区 git commit -m “提交文字说明”
  • 查看暂存区与工作区文件状态 git status
  • 修改提交后的文件,可通过git diff查看修改的内容
  • git diff 查看的是仓库文件与暂存区文件的区别,git diff –cached查看的是暂存区与上一次提交后也就是分支里面文件的区别
  • 查看工作区与提交后分支里面的文件差异可以用git diff HEAD – <file.txt>
  • 显示从最近到最远的提交日志 git log
  • 回退版本 git reset -hard HEAD^ HEAD代表当前版本,加上^表示上一个版本,两个依次类推。也可写成HEAD~100,也可写成某一次确定的提交ID,在git log可看到,前几位ID即可
  • git reflog 可以查看命令历史,包括每一次提交的ID,准确定位要回退的版本
  • cat <file.txt> 可以查看文件内容
  • 修改文件,未add到暂存区;或者add到暂存区后又修改文件后,未add。使用git checkout – file.txt可还原到上一次add或commit的操作版本。
  • 修改文件后,并add到了暂存区,可使用git reset HEAD file.txt 取消add操作(仅仅是回退了add操作,并未回退文件修改内容),经试验,同一文件多次add操作在暂存区合并为一次,修改也合并为一次修改。也就是说,多次修改及add操作后,执行git reset HEAD file.txt和git checkout – file.txt后,文件会回到上一次commit后的内容。
  • 修改文件并add后,有commit到本地仓库,可进行版本回退撤销之前的修改。
  • 如果你用的rm删除文件,那就相当于只删除了工作区的文件,如果想要恢复,直接用git checkout – 就可以;如果你用的是git rm删除文件,那就相当于不仅删除了文件,而且还添加到了暂存区,需要先git reset HEAD ,然后再git checkout – ;如果你想彻底把版本库的删除掉,先git rm,再git commit 就ok了
  • 关于git checkout – 既可以还原修改的操作,又可以从版本中还原文件。试验后我的理解是:这个操作会先检验暂存区有没有此文件,有的话就代替工作区的文件,没有就将版本库中的此文件代替工作区的文件。

与github相关联

创建ssh keys:ssh-keygen -t rsa -C “youremail@example.com“。并在github上进行相应的设置。

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;关联后,使用命令git push -u origin master第一次推送master分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

SSH协议:git@github.com:leaps339/learngit.git https协议:https://github.com/leaps339/learngit.git

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

克隆可用git clone 对应协议仓库

分支管理

  • 查看分支:git branch
  • 创建分支:git branch
  • 转换分支:git checkout
  • 创建并转换分支:git checkout -b
  • 合并某分支到当前分支:git merge
  • 删除分支:git branch -d
  • 分支冲突时合并会有meger failed提示,此时需手动修改文件冲突再进行add、commit操作。完成合并后删除分支
  • git log –graph 可以查看分支合并图
  • 一般合并是fast forward模式,只是将head指针移动了位置,所以合并较快,但不能看到合并历史。
  • 合并分支禁用fast forward:git merge –no-ff -m “提交说明”。将合并后的结果再一次进行commit操作,则可以看到合并历史。
  • 在A分支上进行工作,有紧急情况需另开分支B解决其他问题。A分支上的工作并未完成,此时切换分支会将未完成工作带到B。在完成B工作后执行commit会将在A中的add的后的文件一并提交(在A中修改完文件没add不会受影响),并且Git规定在哪个分支上提交,就是在那个分支上工作。所以在切换时需使用git stash保存状态。链接
  • 使用git stash后会保存工作区与暂存区的数据并清空暂存区。可使用git stash lish查看所有保存的stash,通过git stash apply恢复,git stash drop删除保存的stash。也可使用git stash pop,恢复的同时把stash也删了。当然可通过git stash apply stash@{0}恢复指定id的stash。
  • 在另开一个分支A后没有合并分支A就要将其删除,可以使用git branch -D 强行删除

多人协作

  • 使用git remote -v查看远程库详细分支信息
  • 本地新建的分支不推送远程,其他人就是不可见的
  • 通过git push origin branch-name从本地推送分支,推送失败则说明有冲突,使用git pull将远程库中最新的提交抓取下来
  • 在本地创建和远程库分支对应的分支:git checkout -b branch-name origin/branch-name。本地分支名最好和远程分支一样
  • 可使用git branch –set-upstream branch-name origin/branch-name将本地分支与远程分支关联
  • git pull抓取分支后手动解决冲突再commit,然后进行push操作

标签管理

  • 为某次提交打上一个标签,便于查找而不是用commit ID。相当于ip地址与域名的关系
  • git tag 为当前最近一次commit打上标签,也可以在最后指定commit ID
  • 可以创建带有说明的标签git tag -a -m “说明文字”
  • git show tag可以查看标签说明
  • git tag可以查看所有标签
  • 将指定本地标签推到远程仓库:git push origin
  • 将所有未推送的标签推到远程仓库:git push origin –tags
  • 删除指定标签:git tag -d
  • 删除已经推到远程仓库的标签,先本地删除,然后删除远程仓库标签:git push origin :refs/tags/

自定义git

  • 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:
# 此为注释 – 将被 Git 忽略
*.cs       # 忽略所有 .cs 结尾的文件
!ABC.cs    # 但 ABC.cs 除外
/BLL       # 仅仅忽略项目根目录下的 BLL 文件,不包括 subdir/BLL
build/     # 忽略 build/ 目录下的所有文件
doc/*.txt  # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

规则很简单,不做过多解释,但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

另外有一个自动生成.gitignore文件内容的网站链接

  • 可以通过git config –global alias.自定义命令 原始命令 为命令配置别名,相当于宏定义,方便记忆与敲打。

   转载规则


《git命令学习》 飞跃 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
随便说点啥 随便说点啥
一晃2020年已过了大半,突如其来的疫情打乱了许多人的计划,现如今国内形势已趋于稳定,国外还在乱成一锅粥。或许在2020年,我们每个人都有一个共同的心愿—疫情快快结束。 想起2019年的年终总结,毕业设计已经完成,答辩也告一段落,现
2020-05-17
下一篇 
神奇的UI--小船呀游啊游 神奇的UI--小船呀游啊游
疫情原因,至今不允许返校。可怜今年毕业,毕业照与毕业典礼是想都不用想了,毕业答辩已经转为线上了,连毕业证也许都不能亲自去领了,真是悲哀!呆在家里都要半年了,哎,一个人是懒得是啥都不想干,想研究点东西也总是钻不进去,天天看着逐渐膨胀的身体发呆
2020-04-28
  目录