http://rogerdudler.github.io/git-guide/ https://www.atlassian.com/git/tutorials/
fatal: Out of memory? mmap failed: No such device
配置git ssh-keygen -t rsa -C "***@***.com(邮箱)" cd .ssh subl id_rsa.pub 之后在页面添加key 或者 ssh-keygen -t rsa -C "***@***.com(邮箱)" cat ~/.ssh/id_rsa # set user name git config --global user.name '***(name)' # set user email git config --global user.email '***@***.com(邮箱)' # set file mode git config --global core.filemode false # set content editor git config --global core.editor vim # set diff tool git config --global merge.tool vimdiff # set ui color git config --global color.ui auto cd .. cd Traning/ --- 自己建的文件夹
遇到
卸载git重装, 先移除.ssh文件和.gitconfig, sudo apt-get remove git
遇到Agent admitted failure to sign using the key
执行: ssh-add 出现Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa) 即解决
git clone git@git.***.com.cn:projectName/***.git(项目路径,git项目里会提供)
git clone -b develop git@git.***.com.cn:projectName/***.git
------------------------------------------------
git提交
ls
cd 文件夹/
git status
git stash
git pull origin develop
git stash pop
gitg
git commit -m ""
git push origin deveop
只有自己一个分支时使用
git add -A
git commit -m "comment..."
git pull -r
git push origin ***(name)
-----------------------------------------
# create branch(git checkout -b branchName)
git branch ***(name)
git config --global user.name ***(name)
------------------------------------------
#将develop刚提交的代码插到master分支上
在develop分支上找到刚提交代commitId(b0f1878ee0f3d08669c2bb9094eaf6a534b2dd3d)
在develop分支上git stash,然后git status检查一下,
git checkout master
git branch查分支,确认在maste分支上
git pull -r再git pull -r确认一下
git cherry-pick b0f1878ee0f3d08669c2bb9094eaf6a534b2dd3d 将你在develop分支修改的插到master分支
gitg 查是否提交上(跟master其他代码在一线上)
git push origin master
git branch
git checkout develop
git status
git stash pop
git branch
----------------------------------------------------
git 多个 commits merge
方法一:
1. 提交你现在修改的 gitg添加, git commit
2. 然后git rebase -i HEAD~2,
出现类似vi的文字,进行修改, 然后把commit第一个改为 pick,第二个改为squash
接着wq!保存退出
(如果你要是合并三个的话,git rebase -i HEAD~3, 把commit第一个,改为 pick,第二三个改为squash)
3. 如果有冲突:然后git rebase --continue
4. 如果没有冲突,会在上一个文件保存退出后,显示一个类似vi的文字, 注释一个commit(保留一个commit),保存退出
5. 最后提交(push): git push -f origin 分支名
(用-f的原因: git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。=>强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容)
方法二:
1. 安装gitg插件
2. gitg, 将提交的文件移到右边, 第二次提交时选中Amend, git push origin -f 分支
-----------------------------------------------------------------------
各种提交问题
1. commit 但是没有push,想要返回到commit 之前: git reset HEAD^
2. git reset --soft 702219d7b0c1100dc86f8c207246b054571705ed
soft:修改的代码仍然存在
702219d7b0c1100dc86f8c207246b054571705ed:返回到的版本
3. merge分支的冲突:
git stash, git checout develop, git pull -r, git checkout branchA, git rebase develop,
解决冲突, git add, git rebase --continue, git push origin branchA
4. pull冲突:
解决冲突, git add, git stash, git pull -r, git stash pop
5. pop出指定的stash
git stash apply {{stashid}}
apply 只会读取暂存区的数据,通过apply后,暂存区的数据仍然存在;而pop是取出最新的一次暂存数据,取出后,这次数据就不会存在于暂存区中了
6. 还原为前一次的状态:git reset --hard origin/master
git clean
git clean 小结 + rm
删除 一些 没有 git add 的 文件; git clean 参数 -n 显示 将要 删除的 文件 和 目录 -f 删除 文件,
-df 删除 文件 和 目录 git clean -n 文件 git clean -df 文件 git clean -f 文件
rm 文件
git merge提交
1. git merge whitespace, 如果有冲突,
git merge --abort
2. 合并单条提交
- git checkout master
- git cherry-pick 62ecb3 如果git不能合并代码改动(比如遇到合并冲突),git需要你自己来解决冲突并手动添加commit。
3. 合并某个分支上的一系列commits
在一些特性情况下,合并单个commit并不够,你需要合并一系列相连的commits。这种情况下就不要选择cherry-pick了,rebase 更适合。还以上例为例,假设你需要合并feature分支的commit76cada ~62ecb3 到master分支。
首先需要基于feature创建一个新的分支,并指明新分支的最后一个commit:
- git checkout -b newbranch 62ecb3
然后,rebase这个新分支的commit到master(--ontomaster)。76cada^ 指明你想从哪个特定的commit开始。
- git rebase --onto master 76cada^
得到的结果就是feature分支的commit 76cada ~62ecb3 都被合并到了master分支。
git 根据tag创建分支
在项目中我们需要根据tag创建分支.现将创建步骤总结一下.假设在你的主分支上有一个tag为v1.0,主分支的名字为master.
git tag -a tag-1.2 -m '创建trunk为tag1.2'
git push origin tag-1.2
1.执行:git origin fetch 获得最新.
2.通过:git branch <new-branch-name> <tag-name> 会根据tag创建新的分支.
例如:git branch newbranch v1.0 . 会以tag v1.0创建新的分支newbranch;
3.可以通过git checkout newbranch 切换到新的分支.
4.通过 git push origin newbranch 把本地创建的分支提交到远程仓库.
现在远程仓库也会有新创建的分支啦.