git使用及问题总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/love666666shen/article/details/80991039

最近,尝试学习使用Atom编辑博客、文档、阅读代码等。发现Atom打开项目,阅读代码不仅界面简洁方便,而且使用不同的颜色标注,阅读起来也赏心悦目的。同时,通过其安装markdown-writer插件(https://github.com/zhuochun/md-writer)作为markdown编辑器,编写博客也很方便。但是,现在暂时没有找到好用的可视化的GitHub代码插件,进行与GitHub代码托管平台进行可视化交互,所以在本地又安装了git。

1.在Windows上安装Git

在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项一路next安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:

git config --global user.name "Your Name"				
git config --global user.email "[email protected]"

因为***Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。***你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

2.git常用命令

查看、添加、提交、删除、找回,重置修改文件

git help # 显示command的help
git show # 显示某次提交的内容 git show KaTeX parse error: Expected 'EOF', got '#' at position 21: …t co -- <file> #̲ 抛弃工作区修改 git co…id> # 恢复某次提交的状态,恢复动作本身也创建次提交对象
git revert HEAD # 恢复最后一次提交的状态

查看文件diff

git diff # 比较当前文件和暂存区文件差异 git diff
git diff # 比较两次提交之间的差异
git diff … # 在两个分支之间比较
git diff --staged # 比较暂存区和版本库差异
git diff --cached # 比较暂存区和版本库差异
git diff --stat # 仅仅比较统计信息

查看提交记录

git log git log # 查看该文件每次提交记录
git log -p # 查看每次详细修改内容的diff
git log -p -2 # 查看最近两次详细修改内容的diff
git log --stat #查看提交统计信息
tig
Mac上可以使用tig代替diff和log,brew install tig

Git 本地分支管理

####查看、切换、创建和删除分支
git br -r # 查看远程分支
git br <new_branch> # 创建新的分支
git br -v # 查看各个分支最后提交信息
git br --merged # 查看已经被合并到当前分支的分支
git br --no-merged # 查看尚未被合并到当前分支的分支
git co # 切换到某个分支
git co -b <new_branch> # 创建新的分支,并且切换过去
git co -b <new_branch> # 基于branch创建新的new_branch
git co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除

git co $id -b <new_branch> # 把某次历史提交记录checkout出来,创建成一个分支
git br -d # 删除某个分支
git br -D # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)

分支合并和rebase

git merge # 将branch分支合并到当前分支
git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交
git rebase master # 将master rebase到branch,相当于: git co && git rebase master && git co master && git merge

Git补丁管理(方便在多台机器上开发同步时用)

git diff > …/sync.patch # 生成补丁
git apply …/sync.patch # 打补丁
git apply --check …/sync.patch #测试补丁能否成功

Git暂存管理

git stash # 暂存
git stash list # 列所有stash
git stash apply # 恢复暂存的内容
git stash drop # 删除暂存区

Git远程分支管理

git pull # 抓取远程仓库所有分支更新并合并到本地
git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
git fetch origin # 抓取远程仓库更新
git merge origin/master # 将远程主分支合并到本地当前分支
git co --track origin/branch # 跟踪某个远程分支创建相应的本地分支
git co -b <local_branch> origin/<remote_branch> # 基于远程分支创建本地分支,功能同上
git push # push所有分支
git push origin master # 将本地主分支推到远程主分支
git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push origin <local_branch> # 创建远程分支, origin是远程仓库名
git push origin <local_branch>:<remote_branch> # 创建远程分支
git push origin :<remote_branch> #先删除本地分支(git br -d ),然后再push删除远程分支

Git远程仓库管理

git remote -v # 查看远程服务器地址和仓库名称
git remote show origin # 查看远程服务器仓库状态
git remote add origin git@ github:robbin/robbin_site.git # 添加远程仓库地址
git remote set-url origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm # 删除远程仓库

创建远程仓库

git clone https://github.com/xxxxxx/xx.git # 用带版本的项目创建纯版本仓库
scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上
mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库
git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址
git push -u origin master # 客户端首次提交
git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track
git remote set-head origin master # 设置远程仓库的HEAD指向master分支
也可以命令设置跟踪远程库和本地库
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop

3.git使用遇到的问题

1.使用git add filename 命令遇到error: failed to push some refs to 'https://xxxxxxx/xx.git’问题

解决方式:切换到项目所在文件夹下,报错是因为当前目录没有.git文件,切换到.git所在路径下重新使用该命令即可。

2.使用git push和git push origin master命令遇到fatal: not a git repository (or any of the parent directories): .git问题

解决方式:切换到项目所在文件夹下,报错是因为当前目录没有.git文件,切换到.git所在路径下重新使用该命令即可。如果还是解决不了,而该项目很重要而是做了很久的项目,碰到这种情况,一定要记得先备份该项目,再来执行这条下面的git init命令; 慎重!!
产生原因:一般是没有初始化git本地版本管理仓库,所以无法执行git命令
解决方法:操作之前执行以下命令行: git init
然后执行一下git status查看状态信息,good,问题解决。

3.fatla: bad default revision ‘HEAD’ 错误
当从github.com下载项目后,不下心删除该项目目录下的.git文件夹,再去编译就会出现:
  fatal: Not a git repository (or any of the parent directories)
的错误。这是由于本地版本管理仓库被删除了,需要重新初始化仓库,建立新的仓库:
  git init
  再次去编译又会出现如下错误:
  fatla: bad default revision ‘HEAD’
这是由于仓库里没有任提交在里面,所以它会报这个错。再执行下面的命令:
查看仓库状态:
  git status
添加本地工程所有文件到仓库中:
  git add -A
提交到仓库:
  git commit -m “custom your message”
再次去编译就不会有问题了。

4.push修改后出现下面的问题:
error: src refspec refs/heads/master does not match any.
error: failed to push some refs to ‘originmaster’
在github库中对某个文件进行了在线的编辑,并且没有同步到本地库,或者在本地库添加了文件test.txt,并想提交到github,也会出现类似的错误:error:failed to push some refs to。
问题原因:这个问题是因为远程库与本地库不一致造成的,那么我们把远程库同步到本地库就可以了。

解决方式:
可以通过如下命令进行代码合并【注:pull=fetch+merge]
git pull --rebase origin master
顺利执行上面代码后看到本地代码库中的README.md文件是修改之后的文件,此时再执行语句 git push -u origin master即可完成代码上传到github

5.如果使用git命令行第一次push项目到GitHub,并出现类似下面的问题:

Administrator@XTTK-20180627LV MINGW64 /d/workplace/java-learning-materials (master)
$ git push
error: src refspec refs/heads/master does not match any.
error: failed to push some refs to 'https://github.com/username/projectname.git'

可以使用如下方式解决:

echo "# projectname" >> README.md
git init
git add README.md
git commit -m "comment"
git remote add origin https://github.com/username/projectname.git
git push -u origin master

该方式是,先创建一个README.md,接着使用git init命令重新初始化在本地已存在的git repository,并将README.md添加到项目中,然后git commit -m "first commit"命令是提交修改的注释,通过命令git remote add origin https://github.com/username/projectname.git将项目远端路径添加进git,使用该命令时注册GitHub的邮箱会收到下面的邮件,最后使用git push -u origin master命令,当看到如下图所示的登陆GitHub的界面,输入用户名和密码即可以成功push到github上。

邮箱收到的邮件提醒
注册GitHub的邮箱收到的邮件提醒

这里写图片描述

git push成功后,在git命令行框中可以看到类似下面的结果:
git push成功
如果是通过命令行push一个已经存在的repository,可以使用如下命令push:

git remote add origin https://github.com/username/projectname.git
git push -u origin master

上面的username是你自己注册GitHub时候的用户名,projectname是你GitHub上的项目名,comment提交修改时的备注注释。

参考:
git安装https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000
git命令https://www.cnblogs.com/cspku/articles/Git_cmds.html

git问题:
https://blog.csdn.net/u012306714/article/details/52571596
https://blog.csdn.net/FreeApe/article/details/47858527
https://blog.csdn.net/s1674521/article/details/71844169
https://blog.csdn.net/MBuger/article/details/70197532

猜你喜欢

转载自blog.csdn.net/love666666shen/article/details/80991039