Git用法学习总结

来源:互联网 发布:dwg文件查看器for mac 编辑:程序博客网 时间:2024/06/06 01:49

1. Git基本用法

git init //在当前文件夹下创建仓库,仓库名为该文件夹名git add . //添加当前文件夹下所有文件到暂存区git add test.txt //将test.txt添加到暂存区git commit -m "提交说明" //将暂存区的内容全部提交到版本库中git status //查看当前git工作区状态git diff test.txt //查看文件test.txt的修改信息git push -u origin master //第一次推送master分支到远程库origin的master分支,第一次加参数ugit push origin master //将当前master分支推送到远程库origin的master上(非第一次推送)git push origin branch //将当前branch分支推送到远程库origin的branch分支上(无论你当前是否在branch分支上)。本地与远程的分支是对应的git rm file //在工作区中删除file,如果想在版本库中也删除file,则用命令‘git commit -a "提交说明"’ 就行了。

注: 把当前分支推送到远程库对应分支上时,可以省略分支名。

如:当前位于master分支,若要推送本地master分支到远程origin库的master,可用:git push origin即可。

再如:当前位于dev分支,若要推送本地dev分支到远程origink库的dev,可用:git push origin即可。

2. Git连接远程库

git remote -v //查看连接到的远程库git remote add origin url //将本地库关联到远程库,远程库名命名为origin,远程库地址为url,url可以为ssh协议也可以为https协议git remote rm origin //取消与远程库origin的关联//将本地库同时关联到github库和码云库git remote add github githuburl //github是远程库的命名,也可以取其他的名字,githuburl为github上的库地址git remote add gitee giteeurl //gitee是远程库的命名,也可以取其他的名字,giteeurl为码云上的库地址

3. Git分支管理

git branch //查看当前库的所有分支git checkout branchName //切换到分支branchName上git checkout -b newBranch //创建并切换到newBranch上,-b表示创建并切换git branch -d dev //删除dev分支git branch -D dev //强制删除一个没有合并过的dev分支git merge branch //将branch分支合并到当前分支,这种合并采用的是Fast-forward模式,即“快进模式”。这种模式不会生成新的commit git merge --no-ff -m "合并说明" branch //将branch分支合并到当前分支。“--no-ff”表示禁止快进合并模式。这种模式会生成新的commitgit push origin branch //把branch分支推送到远程库对应的远程分支上。git checkout -b dev origin/dev //创建远程origin的dev分支到本地git branch --set-upstream dev origin/dev //建立本地分支和远程分支的关联

注:

1)当远程库有某分支,而本地没有,需要在本地创建与远程库对应的该分支时,可以这样:git checkout -b dev origin/dev //创建远程origin的dev分支到本地

若要推送代码还需建立管道流通信:git branch --set-upstream dev origin/dev //建立本地分支和远程分支的关联

2)当本地有某分支,而远程库没有,需要推送本地分支到远程库时,可以这样:git push github branch1 //把branch1分支推送到远程库对应的远程分支上。,这时会提示错误:

错误提示

意思很明显,没有远程库中与当前分支的管道流。使用git push --set-upstream github branch1命令,建立流管道连接即可。这时会发现远程库中也有了branch1分支。

再注: 为什么会有的是git push origin branch1而有的是git push github branch1呢?
后面就会明白,其实origin和github都只是你自己远程库的名字,默认的叫origin,根据需要可能会修改为其他名字。如,这里修改为github了。

4. 版本回退

git reset --hard HEAD^ //回退到上一个commit节点版本,HEAD表示当前节点,HEAD^表示上一个commit,HEAD^^表示上上一个commit...同理类推,表示上100个commit怎么办呢?很easy~git reset --hard 2458144 //回退到commitId为2458144的节点版本git checkout -- file //撤销工作区里对file的修改git reset HEAD file //撤销添加到暂存区的file,重新放回工作区//当你不但修改工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步//第一步用命令git reset HEAD file,撤销添加到暂存区的file//第二步用命令git checkout -- file 撤销工作区里对file的修改

5. 标签管理

标签相当于给某一个节点取的名字,方便记忆和读取,本质是commit节点。

git tag //查看所有标签git tag show v1.0 //查看标签v1.0的信息git tag v1.0 //在当前commit节点上打上v1.0标签git tag v2.1 commitId //在指定commitId节点上打上v2.1标签git tag -a v2.0 -m "version 2.0 released" 2634564 //给commitId为2634564的节点打上v2.0标签,并添加说明"version 2.0 released"git tag -d v1.0 //删除v1.0标签git push origin v1.0 //推送v1.0标签到远程库origingit push origin --tags //推送所有未推送到远程的本地标签到远程库origin//删除远程库标签git tag -d v1.0 //1. 先从本地库删除git push origin :refs/tags/v1.0 //2. 再推送到远程库删除

6. Git 打印日志

git log //详细打印提交日志git log --pretty=oneline //一行的形式打印提交日志git log --graph //打印合并过的分支路径git log --pretty=oneline --abbrev-commit //以简洁形式打印提交记录git reflog //打印命令历史日志,也就是打印以前做过哪些命令操作

7. 冲突解决

1)当push到远程库的时候往往会碰到冲突错误

推送冲突错误

解决办法错误日志已经说出来了,那就是使用git pull 命令。

在绑定多个远程库时会遇到
fatal: No remote repository specified. Please, specify either a URL or a remote name from which new revisions should be fetched.
的错误。这里的意思是,你需要指定从哪个远程库的哪个分支上拉取。比如,”git pull github master”从名为github的远程库的master分支上拉取。

git pull命令执行后你需要手动解决冲突。怎么手动?

就是你的本地文件与远程不同的地方,它已经标出来了,不信打开本地文件夹看看?是不是多了<<<<<<<,=======,>>>>>>>这样的标记,那就是标出来的本地和远程的不同地方。

所谓手动解决冲突,就是你自己用眼看,看这些不一样的地方,然后决定你想要保留的内容。最后再执行重新add、commit、push到远程,就不会出现冲突了。

注:但是git pull这个命令是从远程下载代码,自动合并到本地的,很容易出现大量的“<<<<<<<,=======,>>>>>>>”,如果你改动的多的话,简直就是噩梦,因此是不安全的。

推荐使用git fetch命令,具体如下:

git fetch origin master:tmp//抓取远程代码到本地的新生成分支tmp上(这个tmp分支是自动生成的)git diff tmp //比较master分支与tmp分支的不同git merge tmp//最后再合并

2)合并时冲突

$ git merge devAuto-merging readme.txtCONFLICT (content): Merge conflict in readme.txtAutomatic merge failed; fix conflicts and then commit the result.

错误提示的很明确了,就是如上面的手动解决冲突就行了

8. Github与码云(Gitee)

Github不用多说了,最有名的版本控制系统远程仓库平台。而码云(Gitee)相当于中国的github吧。

那么问题来了…纠结症又犯了~到底用哪个呢?- -|||



~ haha…都可以用,可以同时用哦~

本地电脑安装一个gitbash可以连接多个仓库平台。一个本地仓库也可以对应连接多个远程仓库。

首先介绍本地Gitbash连接多个仓库平台

将本地Gitbash用户主目录的.ssh目录下的id_rsa.pub里的内容(公钥)添加到github和gitee的ssh key里,这是标识你电脑和github以及gitee的对应关系的。可以添加多个,因为你可能不止一台设备嘛~

:啥?不知道啥是用户主目录?

:打开Gitbash,用命令pwd就出来了

:啥?用户主目录下没有.ssh目录?

:你肯定第一次用吧?在Gitbash里,用命令git init新创建一个仓库就会生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件,分别是私钥和公钥。

其他就不详细介绍了…

接着介绍如何将本地的一个库同时关联到github和gitee上的两个远程库

举个栗子~
我有一个本地仓库,名字叫:learngit
我想把它同时连接到我的github和码云,并且每次提交代码可以选择性的提交我想提交的平台。

  • 1.在github和码云分别创建名为learngit的仓库
  • 2.在本地仓库learngit文件夹下,右键–>Gitbash here…
    打开了Gitbash客户端(或者由Gitbash客户端切换目录到这个目录下也行)。

3. 接下来命令操作:

git remote -v //查看远程连接信息

答案肯定是什么都没连…,接下来要做的就是分别关联本地learngit仓库到github和码云

git remote add github githuburl //github是远程库的命名,也可以取其他的名字,githuburl为github上的库地址git remote add gitee giteeurl //gitee是远程库的命名,也可以取其他的名字,giteeurl为码云上的库地址

关联后可以用git remote -v查看连接信息
我的效果如下:

远程库连接信息

上图说明连接到了gitee、github两个远程库,fetch、push是可用的权限,意思是可以抓取远程库数据到本地,也可以推送数据到远程库。

4.推送代码时:

git push github master //推送本地master内容到github对应的仓库中去git push gitee master //推送本地master内容到gitee对应的仓库中去

注:仓库分支的推送都是对应的,本地的master分支默认推送到远程库的master分支下。想想也是,不同分支的推送就不叫推送了!那叫分支合并啦好不好~

参考文档:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

完结撒花~~~

原创粉丝点击