Git的你可能需要的一些常用方法和操作

为什么写这篇博客

在公司实习不可避免肯定会用到git。在网上有很多关于git各种操作的博客和技术文章,但是目前的大家的编辑器Idea已经可以很好的和git融合起来,既然如此,我们咋不熟悉git命令的情况下可以使用Idea自带的一些功能。当然大神还是用git命令行更方便。

在这里推荐下廖雪峰的git博客

初始化

首先是下载个git,这就不多说了。下载安装:在Windows上使用Git,可以从Git官网直接下载安装程序,,然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后需要配置一下自己名字账户。在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

如果你公司的项目是放在自建的gitlab上面, 如果你不进行配置用户名和邮箱的话, 则会使用全局的, 这个时候是错误的, 正确的做法是针对公司的项目, 在项目根目录下进行单独配置,或者你想要使用不同的账号时

$ git config user.name "gitlab's Name"
$ git config user.email "gitlab@xx.com"
$ git config --list

git config --list查看当前配置, 在当前项目下面查看的配置是全局配置+当前项目的配置, 使用的时候会优先使用当前项目的配置,查看的时候两个名字都有,即两个user.name,一般来说当前项目的会在最下面。对了,进入config的界面后,按q即可退出到命令行。

创建本地版本库

$ git init

这一步往往被许多人忘了,成功后在当前的目录下有.git文件夹,注意可能被隐藏了。

连接远程库

连接上远程账户

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:`

$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。SSH Keys其实就是一个密码,证明你可以连接到当前的账户。

连接远程仓库

在自己的目录下创建了git项目目录后(注意git init),然后通过:

$ git remote add origin git@github.com:michaelliao/learngit.git

即可连接,注意后面的是你的github项目上的SSH KEY,当然也可以选择https进行连接,不过连接额时候会需要你输入你的github的账户密码,具体取决你自己。
例如https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

到这为止,你已经可以管理自己的本地项目和远程项目了。但是github最大的优点还是多人共同管理。

分支管理

分支其实更像java里的指针。指向的是不同状态下的项目。但是始终都是同一个项目。
一般master为主分支,进行发布正式版本,develop为开发版本进行开发。当开发完成后就将develop分支合并到当前的分支。这章在廖雪峰的博客里说的很好。
创建分支:

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

说到这,不免提起提交代码的正确方法:

$ git add readme.txt 
$ git commit -m "branch test"
[dev b17d20e] branch test
 1 file changed, 1 insertion(+)
 $ git push

$ git add是将当前的文件添加到本地的暂存库里去。$ git add .提交所有的文件。$ git commit提交到本地的仓库里去。 $ git push将本地库推送到远程库。
这里可能会出现的问题:
1.git冲突
即在push的时候,别人对你修改的代码也修改了。先看本地的冲突,合并本地某分支到当前分支:git merge <name>,如果两个分支都对同一个文件修改了。则会出现:

Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

注意这时候已经将两个文件合并了,但是是不正常的,即两个版本信息都在该文件里,我们需要手动去选择我们需要哪个版本信息。可以通过$ git status快速发现冲突文件。然后vm进入该文件,发现如下:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

自己手动修改后保存即可。HEAD指向的是当前的分支。
在远处冲突时。往往是这样的情况:我么首先 $git add $ git commit后,执行 $ git push后,会提示远程版本被修改过,需要pull,于是执行 $ git pull,这时候会提示,远程的版本和你当前的版本对同一个文件进行修改了(如果没有,自然更好)。有的话即产生冲突,这时候需要使用git merge origin/master。提醒你哪里有冲突,

$ git merge origin/master
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

这时候,就和上面一样,通过$ git status`进行修改冲突文件。
在网上看到有这样说的,远程分支是与当前分支合并:

$ git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。

$ git fetch origin
$ git merge origin/next

但是个人理解如果merge没问题的话会自动merge,如果有冲突的话,还是需要手动merge。
错误如下;

error: Your local changes to the following files would be overwritten by merge:

***************************************

Please, commit your changes or stash them before you can merge.

还可以

git stash

git pull

git stash pop

git stash的作用是把本地的改动保存起来,

然后在git pull 这样就不会有冲突的问题

最后git stash pop 就是把之前的改动merge到代码中。有篇文章写的很好,说的就是IDEA里的操作。
2 .管理分支
这里主要说一个操作,就是将本地的分支和远程分支对应起来。

$ git branch --set-upstream-to=origin/dev dev

指定本地dev分支与远程origin/dev分支的链接,这样我们在本地的dev分支下,执行$ git pull可以直接将对应的远程分支pull下来,当然,也可以每次自己加上pull的远程分支名字。否则会报错。
3.切换分支
切换分支中需要注意的是一个分支的东西带到另一个分支去。造成工作的混乱。正确的做法是每次切换分支前,保证自己当前分支的git状态是干净的。可以用$ git status查看其状态。正确的做法,首先将自己该分支的文件都$ git add$ git commit掉。如果是在不想提交可以使用$ git stash保存下现场,回来的时候再回来。
3.删除本地文件
我们常常会创建一些当前有用,但是后面不需要的一些文件,而我们在创建之初时可能已经将该文件提交到本地仓库。并push到远程仓库,那么我们该如何在删除了文件后,删除仓库里的文件呢。
网上大部分的方法都是:git rm --cached -r .idea.idea时我们要删除的文件夹,如果不是文件夹,不需要加-r,说到这,我们在提交代码时,像.idea这样的文件往往不要上传(上次因为这被mentor说了),所以可以添加git add .gitignore,即.gitignore文件,具体怎么做,网上很多,点击
上面的方法固然可行,但是很麻烦,我都已经删了本地文件,难道还得一个一个删除仓库里文件?非也。git commit -am //用于提交跟踪过的文件。不仅仅是删除,文件位置移动也可以。所以当本地仓库中的文件有大幅度的删除或者路径改变,应该使用-am而不是-m。不过也可以通过git status查看文件的状态,在考虑应该使用-m还是-am。具体可以参考博客https://www.jianshu.com/p/cb035bac33b5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值