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