git 常用命令及使用情况汇总

1.git 仓库创建

git init
git add *.c # 添加文件到仓库
git add README # 添加README文件
git commit -m "初始化项目版本" # 注: 在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "

2. 克隆仓库

git clone git://github.com/schacon/grit.git

首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库

然后可以在本地仓库目录下运行,git bash

git remote add origin git@github.com:git_username/repository_name.git

添加后,远程库的名字就是origin,也可以改成别的。

下一步,就可以把本地库的所有内容推送到远程库上:

git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样。从现在起,只要本地作了提交,就可以通过命令:

git push origin master

3.连接到github仓库

现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。

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

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

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可。

如果一切顺利的话,可以在用户主目录里找到.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文件的内容。点“Add Key”就添加完成了。

(3). 添加远程库

git remote add origin git@github.com:git_username/repository_name.git

(4). 同步本地库和远程库

git pull --rebase origin master // 把本地仓库的变化连接到远程仓库主分支

git push -u origin master  //把本地仓库的文件推送到远程仓库

3. git merge 和 git rebase

原理请见

4.与远程仓库同步的常见问题

4.1 pull 和 push 命令

1.git pull

这个命令是用来获取远程分支的更新并与本地要更新的分支合并。
命令形式:git pull <远程主机名> <本地分支名>

git pull origin master #将远程库的内容同步到当前库

2.git push

这个命令是用来将本地分支的更新推送到远程分支。
命令形式:git push <远程主机名> <本地分支名>

git push origin master # 省略了远程分支名,表示将本地分支master的更新推送到与之关联的分支,如果分支不存在就会在远程新建一个master分支。

4.2 本地库与远程库的关联和取消

查看当前连接:

git remote -v

关联:

git remote add origin git@github.com:git_username/repository_name.git

取消:

git remote remove origin

4.3 常见错误解决方法

4.3.1 fatal: refusing to merge unrelated histories

在你操作命令后面加–allow-unrelated-histories
例如:

git merge master --allow-unrelated-histories # merge时
git pull origin master --allow-unrelated-histories # pull时
git push origin master --allow-unrelated-histories # push时

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

首先,这里可以通过commit的方式解决这个冲突问题

其他解决方法如下:

方法一: stash

git stash
git commit
git stash pop

接下来diff一下此文件看看自动合并的情况,并作出相应修改。

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

**方法二:**放弃本地修改,直接覆盖

git reset --hard
git pull

4.3.3 error: You have not concluded your merge (MERGE_HEAD exists)

此时可能时因为同步过程中,出现冲突,需要合并解决冲突的状态。

一、这里先介绍一

下git fetch 和 git pull 两种合并分支的方式:**

这两种方法都可以从远程获取最新版本到本地

1.Git fetch:只是从远程获取最新版本到本地,不会merge(合并)

git fetch origin master   //从远程的origin的master主分支上获取最新版本到origin/master分支上
git log -p master..origin/master //比较本地的master分支和origin/master分支的区别
git merge origin/master          //合并

2.Git fetch:从远程获取最新版本并merge(合并)到本地

git pull origin master  //相当于进行了 git fetch 和 git merge两部操作

注意:实际工作中,可能git fetch更好一些, 因为在merge前,可以根据实际情况决定是否merge

二、再说导致报错:error: You have not concluded your merge (MERGE_HEAD exists).的原因可能是在以前pull下来的代码自动合并失败

解决办法一:保留本地的更改,中止合并->重新合并->重新拉取

git merge --abort
git reset --merge
git pull

解决办法二:舍弃本地代码,远端版本覆盖本地版本(慎重)

git fetch --all
git reset --hard origin/master
git fetch

参考引用

https://www.cnblogs.com/nebie/p/10830838.html
https://blog.csdn.net/wh_19910525/article/details/7554489
https://blog.csdn.net/programerxiaoer/article/details/75040093
https://blog.csdn.net/wd2014610/article/details/80854807
https://blog.csdn.net/wsycsdn19930512/article/details/50574217
https://www.runoob.com/git/git-create-repository.html
https://www.cnblogs.com/whowhere/p/9334793.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值