文章目录
Git结构简介
Git主要分为4个部分,以下为各部分的解释以及相关命令
前提:你已经有一个受git控制的目录
-
本地工作区(workspace)——即本地的文件,此时文件不受git控制
-
缓存区(Index)——使用git add命令可以将本地的文件添加到git管理中,add后的文件就在缓存区内
1. git add
2. git add * -
HEAD——这个区域指向你最后一次提交的位置,使用git commit命令后可以将文件提交到HEAD区域
1. git commit -m “代码提交信息,想写啥就写啥”—— -m是message的简写 -
远端仓库——使用git push命令后,文件才会被推送到远端仓库,这时候,其他人才可以看到你的提交
1. git push origin 1.1.1 ——将commit后的文件推送到远端仓库,1.1.1为代码的分支版本
在阅读下面的内容之前,推荐对git操作文件的逻辑有简单了解;强烈推荐下面这篇文章,图文并茂,大家可以只阅读第一和第四章节:https://www.jianshu.com/p/94775fe7e793
Git命令行总结
-
clone仓库
- git clone xxxxx.git xxxdir(若不指定则clone到当前文件夹下)
- git clone xxx.git xxxdir -b 1.1.2 1.1.2为项目版本号
-
创建分支–
git chekout -b 1.1.3
- git checkout -b 1.1.3 会在本地创建一个分支1.1.3并切换到1.1.3分支
- 使用 git push origin 1.1.3会把1.1.3分支推送到远端,没push之前,1.1.3分支在远端仓库是不存在的
- git checkout 1.1.2 会切换回1.1.2分支
- git branch -d 1.1.3 会删除掉新建的1.1.3分支
-
更新(pull):
-
git pull origin 1.1.2
:这会获取(fetch)并且 合并(merge)1.1.2 远端的改动当远端跟本地有冲突的时候:
-
在修改后需要将此文件标记为更新成功:git add README.md
之后就可以在需要的时候提交到服务器上了
以下命令转自:http://marklodato.github.io/visual-git-guide/index-zh-cn.html
-
checkout命令详解:
checkout命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。
当给定某个文件名(或者打开-p选项,或者文件名和-p选项同时打开)时,git会从指定的提交中拷贝文件到暂存区域和工作目录。比如,
git checkout HEAD~ foo.c
会将提交节点HEAD~(即当前提交节点的父节点)中的foo.c
复制到工作目录并且加到暂存区域中。(如果命令中没有指定提交节点,则会从暂存区域中拷贝内容。)注意当前分支不会发生变化 当不指定文件名,而是给出一个(本地)分支时,那么HEAD标识会移动到那个分支(也就是说,我们“切换”到那个分支了),然后暂存区域和工作目录中的内容会和HEAD对应的提交节点一致。新提交节点(下图中的a47c3)中的所有文件都会被复制(到暂存区域和工作目录中);只存在于老的提交节点(ed489)中的文件会被删除;不属于上述两者的文件会被忽略,不受影响。
如果既没有指定文件名,也没有指定分支名,而是一个标签、远程分支、SHA-1值或者是像master~3类似的东西,就得到一个匿名分支,称作detached HEAD(被分离的HEAD标识)。这样可以很方便地在历史版本之间互相切换。比如说你想要编译1.6.6.1版本的git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout master。然而,当提交操作涉及到“分离的HEAD”时,其行为会略有不同,详情见在下面。
checkout HEAD~ files
来把当前提交节点的父节点中的file文件,复制到工作目录并且加到暂存区域中
ps:
HEAD~
表示head中当前节点的父节点,HEAD~3
表示当前节点,网上数三个节点git checkout -b name
来创建一个新的分支。
-
Reset
reset命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。
如果不给选项,那么当前分支指向到那个提交。如果用
--hard
选项,那么工作目录也更新,如果用--soft
选项,那么都不变。
如果没有给出提交点的版本号,那么默认用HEAD。这样,分支指向不变,但是索引会回滚到最后一次提交,如果用
--hard
选项,工作目录也同样。
Merge
merge 命令把不同分支合并起来。合并前,索引必须和当前提交相同。如果另一个分支是当前提交的祖父节点,那么合并命令将什么也不做。 另一种情况是如果当前提交是另一个分支的祖父节点,就导致fast-forward合并。指向只是简单的移动,并生成一个新的提交。
否则就是一次真正的合并。默认把当前提交(ed489 如下所示)和另一个提交(33104)以及他们的共同祖父节点(b325c)进行一次三方合并。结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。
将本地项目推送到github
# 步骤
# 1.创建一个目录
mkdir Test
# 2.进入目录
cd Test
# 3.将当前目录变为git管理仓库
git init
# 4.将文件添加到版本库,这里将目录下的所有文件都添加进去了,也可以指定要加入的文件或文件夹
git add .
# 5.告诉git将文件提交到仓库
git commit -m "first-commit"
# 5.将当前仓库与远程仓库关联
git remote add orign 远程仓库的https地址 # eg: git remote add https://github.com/ssmath/Test.git
# 6.将仓库内master分支的所有内容推送到远程仓库,这里会使用到Github的账号密码
git push -u orign master
# 7. 当本地代码和git代码不一致时(比如git自动创建的代码有reademe,本地没有)会报错: ! [rejected] master -> master (non-fast-forward)
# 8. 使用:`git pull origin master --allow-unrelated-histories` 后面加上 --allow-unrelated-histories , 把两段不相干的 分支进行强行合并
# 9. 然后使用 `git push -u orign master`就可以顺利提交到远程仓库里了
How to remove a remote origin in Git
To remove a remote origin in git, we can use the git remote command followed by the rm origin.
git remote rm origin
Now, you can add a new origin url by using the following command.
git remote set-url origin https://my-new-url.git
If you want to see your current origin url, run the git remote command followed by the -v flag.
git remote -v