目录
3.修改.git文件夹中的配置文件(以后每次提交时不用输入用户名和密码了)
4.4解决远程分支删除后本地 git branch -r依然能看到
6.git rebase 合并多次commit,修改commit提交注释,删除某个commit
6.1 使用 git rebase -i [commit_id] 合并多次提交
6.3 使用 git rebase -i HEAD~2 合并提交(最近两次)
1.安装git(windows系统)
官网下载:https://git-scm.com/downloads
下载后按照默认设置安装即可,安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
本地代码加入git管理
在项目根目录文件下执行如下命令后会生成一个.git的文件夹
git init
将文件暂存到本地git中
1.暂存所有文件
git add .
2.暂存指定文件
git add README.md
提交到本地git中, -m 后面时提交说明
git commit -m "初始化"
2.使用github仓库
创建仓库:
点击 new respository后进入下面的页面
设置完后,点击 Create repository 创建仓库
然后将本地文件关联到github,或者从关联一个已存在的仓库
git remote add origin git@github.com:用户名/仓库名称.git
git push -u origin master
也可以不使用命令行窗口,直接导入即可
3.修改.git文件夹中的配置文件(以后每次提交时不用输入用户名和密码了)
打开.git文件夹,找到config文件
将 url = https://github.com/xxxx/crossDomain.git
修改为 url = https://用户名:密码@github.com/xxxx/crossDomain.git
4.git常用操作
4.1git常用命令
查看文件状态: git status
检出仓库: git clone 仓库地址
添加文件到版本控制:git add [path and fileName]
git add -A . (来一次添加所有改变的文件,注意 -A 选项后面还有一个句点。)
git add . (表示添加新文件和编辑过的文件不包括删除的文件)
git add -u (表示添加编辑或者删除的文件,不包括新添加的文件)
提交文件到本地版本管理:git commit -m “mark” [path and fileName]( 如果不加文件名(fileName), 就是表示提交所有的文件,mark表示备注)
推送远程仓库:git push
查看远程仓库: git remote -v
添加远程仓库:git remote add [name]
删除远程仓库:git remote rm [name]
修改远程仓库:git remote set-url –push [newUrl]
拉取远程仓库:git pull
查看本地分支:git branch (*标记的为当前分支)
查看远程分支:git branch -r
创建本地分支:git branch [name] (注意新分支创建后不会自动切换为当前分支)
切换分支:git checkout [name]
检出到指定版本:git checkout [commit_id]
创建新分支并立即切换到新分支:git checkout -b [name]
删除分支:git branch -d [name] (首先要切换到其他分支,d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法 删除的。如果想强制删除一个分支,可以使用-D选项)
合并分支:git merge [name] (将名称为[name]的分支与当前分支合并)
创建远程分支(本地分支push到远程):git push --set-upstream origin [name] (先创建本地分支,name为本地分支名称)
删除远程分支:git push origin :heads/[name] 或 git push origin :[name]
拉取指定分支:git clone -b 分支名称 代码仓库地址
4.2撤销操作
放弃本地修改:git checkout -- filepathname 或 git checkout .(.代表放弃所有修改)
放弃通过add添加的暂存:git reset HEAD [path and fileName](如果后面什么都不跟的话 就是上一次add 里面的全部撤销了)
撤销commit提交:
1.git log (查看commit提交日志,按q键退出)
2.git reset [commit_id] --hard 重置到reset节点内容,清除reset节点之后的工作区和暂存区内容,可以直接使用git push -f直接提交到远程
git reset [commit_id] --soft 重置到reset节点内容,同时保留reset节点之后的工作区和暂存区的内容,需要先commit,在git push -f 提交到远程
git reset [commit_id] --mixed(默认) 重置到reset节点内容,同时保留reset节点之后的工作区,不保留暂存区内容,需要add,在commit,在git push -f提交到远程
或者
git revert HEAD ( 撤销前一次 commit)
git revert HEAD^ ( 撤销前前一次 commit)
git revert HEAD^~1 (撤销上次提交)
git revert -n [commit_id]
然后再次提交 git commit -m'message'
最后推送到远程 git push
退出 git revert编辑状态:首先Esc退出输入状态,然后Shift+; 在输入q后回车
reset 会清楚之后所有的提交,回到目标版本,revert 只是去除之前的某一次提交,并生成一次新的提交记录
4.3合并分支的某一次提交
代码开发的时候,有时需要把某分支(比如develop分支)的某一次提交合并到另一分支(比如master分支),这就需要用到git cherry-pick命令。
首先,切换到develop分支,敲 git log 命令,查找需要合并的commit记录,比如commitID:7fcb3defff;
然后,切换到master分支,使用 git cherry-pick 7fcb3defff 命令,就把该条commit记录合并到了master分支,这只是在本地合并到了master分支;
最后,git push 提交到master远程,至此,就把develop分支的这条commit所涉及的更改合并到了master分支。
4.4解决远程分支删除后本地 git branch -r依然能看到
使用 git branch -a
命令可以查看所有本地分支和远程分支
使用命令 git remote show origin
,可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息
git remote prune --dry-run origin 查看当前有哪些是该消失还存在的分支
git remote prune origin 删除上面展示的所有分支
git fetch --prune origin 如果没有结果输出说明已经删除完成了
4.5 查看单个分支的提交历史
首先要切换到其他分支
git log 分支名称
4.6保存未提交的修改(git stash)
git stash 会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录
使用git stash save 'message...'
可以添加一些注释
git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。
git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的
通过git stash pop命令恢复进度后,会删除当前进度。
git stash apply [--index][stash_id] 除了不删除恢复的进度之外,其余和git stash pop命令一样
git stash drop [stash_id] 删除一个存储的进度.如果不指定stash_id,则默认删除最新的存储进度
git stash list 显示保存进度的列表
git stash clear 删除所有的存储进度
5.冲突解决
1.推送到远程仓库时冲突
例如:
本地文件内容 :#test ct2
远程仓库文件内容:#test ct0
在本地执行如下命令
git add .
git commit -m 'test'
git push
此时提示需要先更新
执行 git pull
此时提示自动合并失败,需要手动解决 READ.md文件中的冲突
打开READ.md文件,Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容
修改为
然后再次提交
git add .
git commit -m 'test'
git push
已经成功
2.合并分支时冲突
例如:
test分支文件内容 :#test0
dev分支文件内容 :#test1
同样提示存在冲突,同上面一样打开READ.md文件手动解决后然后提交
6.git rebase 合并多次commit,修改commit提交注释,删除某个commit
git rebase -i [startpoint] [endpoint] 或者 git rebase -i HEAD~2(最近两次提交)
合并最近3次提交
6.1 使用 git rebase -i [commit_id] 合并多次提交
git log 查看提交日志
执行 git rebase -i e1c6eed0a8e229bcb8dd250cd6f140416d570be4 进入vim
里面的提示有:
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
按下 i 进入编辑模式,修改第二行和第三行的 pick 为s,保存退出(1.Esc 2.shift+: 3.输入wq)
修改提交注释
再次查看提交日志
6.2修改提交注释
git rebase -i 6361a64e4f1436cefda4070fff1e5b2cb7535c08(这里是需要修改注释的上一次提交commit_id)
将需要修改的提交注释 pick 改为 r
保存退出,修改提交注释
保存退出,再次查看提交日志
6.3 使用 git rebase -i HEAD~2 合并提交(最近两次)
运行it rebase -i HEAD~2,同上,在vim中修改为s,保存退出
填写合并后的提交注释
看看提交日志
6.4 删除某一个提交
git rebase -i e1c6eed0a8e229bcb8dd250cd6f140416d570be4 (这里是需要删除提交的上一次提交commit_id)
6.5 rebase过程中出现冲突解决
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
git rebase --continue
这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。
git rebase --abort