linux下:
sudo apt-get install git
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
生成秘钥:
ssh-keygen -t rsa -C "email@example.com
"
github添加秘钥:
git remote add origin git@github.com:Zheng-Wenkai/learngit.git 本地仓库和远程仓库关联
git remote rm origin 取消关联
工作区-》暂存区-》本地仓库
第一步:提交到暂存区
git add
git add . 添加所有修改文件到暂存区
git add -i
第二步:提交到本地仓库
git commit
提交已经被add进来的改动.
git commit -m “the commit message" 添加提示信息
git commit -a 会先把所有已经track的文件的改动add进来,然后提交(有点像svn的一次提交,不用先暂存). 对于没有track的文件,还是需要git add一下.
git commit --amend 增补提交. 会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消.
第三步:提交到远程分支
稳妥做法:
git show 看一下
git pull 将远程分支拉下,看是否有冲突
有冲突解决方法
1. git stash 备份当前工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
2. git pull
3. git stash pop 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。(此时所有的暂存都将被add需要git reset HEAD .)
git push 提交
错误
untrack 表示是新文件,没有被add过,是为未跟踪的意思。
git clean -f 删除 untracked files
git clean -fd untracked 的目录也一起删掉
git clean -xfd gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
加-n可以看到被删除文件
not staged 表示add过的文件,即跟踪文件,再次修改没有add,就是没有暂存的意
在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
问题:
error: Unable to create 'E:/liuguangsheng-git/2G_RTOS/.git/index.lock': File exists.
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
Updating 715c0868..ecf68eda
解决: 删除 .git/index.lock
查看
git diff 文件或目录 (修改过后) 没有add
git diff --cached 文件或目录 查看(git add 修改过的信息)commit过后看不到
git remote -v 查看远程库消息
git branch -vv 查看本地分支和远程分支的联系
git config --list 查看配置
git log 查看(commit)提交记录
git status 查看git状态
git stash 用于想要保存当前的修改,但是想回到之前最后一次提交的干净的工作仓库时进行的操作.
git show commitID 查看提交修改
撤回
撤回 https://blog.youkuaiyun.com/lingfeng5/article/details/76167102 (未push) https://blog.youkuaiyun.com/sodaslay/article/details/72948722(push)
(未push)
git reset HEAD . 撤回所有add 操作(会保存工作区的修改)
git reset HEAD^ 撤回commit上一次的操作(会保留本次内容)
git reset HEAD id 撤回commit操作(会保留本次内容)
git reset HEAD filename 撤回某个文件的add操作
(push)
git revert 反转 增加的删除 删除的增加
git reset --hard e377f60e28c8b84158 回退到某个版本
git reflog
当你git reset后,后悔时
git reset --hard 98abc5a
添加
git add
git commit --amend 本次commit提交过后,再次提交(没有push)
git commit --amend 文件打开会在修改问题描述
场景1:
有一些修改的文件,但不需要提交,但会影响下一次提交,可以这样:
git stash ------- 将这些文件暂存起来,回到干净的工作区
git stash pop -------找回这些文件
分支与仓库的区别:
分支用于多人开发使用
用来管理仓库
合并分支 当你在两个分支进行开发时 branch1 branch2
克隆
git clone git@192.168.133.11:tmajor/hisi4.4_3798MVXX.git -b chinamobile_shandong_fs
克隆 远程仓库 并创建分支(创建的分支和远程存在的分支相同)
1. 在本地仓库创建远程分支
git branch branch1 创建本地分支
git checkout branch1 切换到本地分支branch1
git push origin branch1 将本地分支branch1发布到远程仓库github
git branch -d branch1 删除本地分支
git push origin :newBranch 在github远程端删除一个分支
git push origin –delete newBranch 在github远程端删除一个分支
2. 克隆远程分支进行开发
git clone git@github.com:Run-world/linux-files.git -b branch1 克隆远程分支下来,进行开发
3. 合并分支branch1到branch2
git pull origin branch1 更新本地分支(在branch1)
git merge branch1 合并分支(在branch2)
4. branch1, branch2. 如果我想把branch1分支上的某几个commit合并到branch2分支
在branch2
git cherry-pick commitID1 commitID2 commitID3 合并多个branch1的多个commit到branch2
解决冲突
git status 查看冲突代码
<<<<<<< HEAD
本地分支代码
============
其他分支代码
>>>>>>>>>>>>
<<<<<<< Updated upstream
pull 下来的代码
=======
本地修改的代码
>>>>>>> Stashed changes
然后:
git add file git cherry-up --continue
或者
git commit
最后
git pull
git push
https://segmentfault.com/a/1190000003015386
https://blog.youkuaiyun.com/fightfightfight/article/details/81039050
git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
场景描述:
A在master下进行开发,此时发现一个bug所以就创建了一个branch1分支,后来他发现他自己搞定不了,就让B去clone这个branch1分支,两个人共同开发,在主分支master下还有c在开发,通过远程分支进行同步。