入门教程
参考廖雪峰的git 教程: https://www.liaoxuefeng.com/wiki/896043488029600
建议第一次使用时先新建个文件夹试试看,不要用工作文件,出问题的话会很难过的……
简单步骤
安装
sudo apt-get install git
创建版本库
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
新建文件readme.txt
,内容随便写
初始化一个Git仓库,使用git init
命令。
添加文件到Git仓库,分两步:
- 使用命令
git add <file>
,注意,可反复多次使用,添加多个文件;
git add readme.txt
添加文件夹内全部文件: git add .
- 使用命令
git commit -m <message>
,描述要提交的信息,完成。
git commit -m "wrote a readme file"
这里有幅图可以解释每个命令的作用:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
用git status
查看状态
添加远程仓库
- 创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
- 登陆GitHub,打开“Account settings”,“SSH Keys”页面:
点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:(新版有变化,但换汤不换药。)
- github上新建仓库
- 把一个已有的本地仓库与远程仓库关联
git remote add origin git@github.com:*your_account*/learngit.git
然后,把本地库的所有内容推送到远程库上
git push -u origin master
这是第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
(根据英文提示敲就好了)
版本回退
git reset --hard HEAD^
//上一个版本
git reset --hard 1094a
//1094a:版本号
git checkout -- file
:丢弃工作区的修改: git checkout -- readme.txt
如果 git add 到暂存区
用命令git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区,然后丢弃工作区的修改: git checkout -- readme.txt
创建与合并分支
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
分支的解释:
1.
2.
创建+切换分支:git checkout -b <name>
git checkout -b dev
用git branch
命令查看当前分支:
$ git branch
* dev
master
3. 在dev上,修改部分文件内容,比如对readme.txt
进行修改,然后提交:
git add readme.txt
git commit -m "branch test"
这是,master和dev指向就不一样了
现在,dev分支的工作完成,我们就可以切换回master分支:
$ git checkout master
Switched to branch 'master'
切换回master分支后,再查看一个readme.txt文件,改变不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:
- 把dev分支的工作成果合并到master分支上:
git merge dev
使用Fast forward模式
- 删除dev分支
git branch -d dev
, 查看分支:
$ git branch
* master
6. 不使用Fast forward模式,
git merge --no-ff -m "merge with no-ff" dev
merge后就像这样:
End:Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
切换远程仓库地址
1、切换远程仓库地址:
方式一:修改远程仓库地址
【git remote set-url origin URL】 更换远程仓库地址,URL为新地址。
方式二:先删除远程仓库地址,然后再添加
【git remote rm origin】 删除现有远程仓库
【git remote add origin url】添加新远程仓库
2、【git remote -v 】查看远程仓库的地址
参考:https://blog.youkuaiyun.com/yihanzhi/article/details/78801027
错误处理
删除本地SSH并新建一个ssh
如果出现下面几种情况,都可以试着用这个方法:
- Saving key “~/.ssh/id_rsa” failed: No such file or directory
- Saving key “/home/username/.ssh/id_rsa” failed: Permission denied
- Saving key “/home/username/.ssh/id_rsa” failed: Is a directory
-
cat ~/.ssh/id_rsa.pub 查看现有是否存在ssh,且ssh是否是自己的
-
如果是ssh问题则在git仓库同目录 删除.ssh文件夹 (隐藏文件夹)
sudo rm -rf ~/.ssh
判断删除成功: cat ~/.ssh/id_rsa.pub
出现/.ssh/id_rsa.pub: No such file or directory
- 重新创建ssh
ssh-keygen -t rsa -C "your_email@example.com"
一路回车
- 在ssh文件夹下pub文件中的内容复制 github上新建一个ssh链接
参考: https://blog.youkuaiyun.com/yemoweiliang/article/details/53215979
更新被拒绝
error: 无法推送一些引用到 ‘git@github.com:***/***.git’
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 ‘git pull …’)。
提示:详见 ‘git push --help’ 中的 ‘Note about fast-forwards’ 小节。
原因可能是之前上传时创建的.git文件被删除或更改,或者其他人在github上提交过代码.
解决方案如下:
1.使用+master 强制更新
git push -u origin +master
2. 尽量先同步github上的代码到本地,在上面更改之后再上传
git pull origin master
(这时候会出来一个问你合并的理由,你自己看着写)
press F2 退出
git pull origin master master
然后再git push 就好了
git push -u origin master
参考: https://blog.youkuaiyun.com/qq_44919293/article/details/89451128
https://www.jianshu.com/p/28e490cd3a19
fatal: 远程 origin 已经存在。
git remote rm origin
git remote add origin git@github.com:your_account/learngit.git