新建仓库文件推送 Git 全局设置 1 2 git config --global user.name "llcn" git config --global user.email "llcn@163.com"
创建一个新仓库 1 2 3 4 5 6 7 git clone http://172.17.12.206:8080/jukaifeng/test.git cd test git switch -c main touch README.md git add README.md git commit -m "add README" git push -u origin main
推送现有文件夹 1 2 3 4 5 6 cd existing_folder git init --initial-branch=main git remote add origin http://172.17.12.206:8080/jukaifeng/test.git git add . git commit -m "Initial commit" git push -u origin main
推送现有的 Git 仓库 1 2 3 4 5 cd existing_repo git remote rename origin old-origin git remote add origin http://xxx/projects.git git push -u origin --all git push -u origin --tags`
git 忽略文件设置 创建
文件夹内右键git bash,输 touch .gitignore,注意中间有空格
编辑器打开生成的 .gitignore 文件,加入
保存
以后再push到仓库的就会过滤这俩了,想加啥自己加
修改 后期再添加.gitignore
文件或者添加某文件夹后,当我们想push文件的时候,我们声明的忽略文件还是会出现在push的目录中
原因 某些文件已经被纳入版本管理中,就算是在.gitignore
中已经声明也不会起作用
解决方案 我们应该先把本地的缓存删除,然后再进行push,操作步骤如下:
1 2 3 git rm -r --cached . // 删除本地缓存 git add . // 添加要提交的文件 git commit -m 'update .gitignore' // 更新本地的缓存
分支-branch 1 2 3 4 5 git checkout <name> // 切换分支 git fetch // 把远程提交拉取到本地仓库,而不是本地工作目录,它不会自行将这些新数据合并到当前工作目录中,我们需要继续执行git merge才会把这些变动合并到当前工作目录。 git pull // git pull和git fetch刚好相反,它直接获取远程的最新提交,直接拉取并合并到本地工作目录,而且在合并过程中不会经过我们的审查,如果不仔细检查,这样很容易遇到冲突。
1. 查看分支 1 2 3 git branch 本地分支 git branch -a 全部分支 git branch -r 远程分支
2. 创建分支 1 2 git checkout -b <branchName> // 基于当前分支创建本地分支 git checkout -b <branchName> <RemoteBranchName> // 基于远程分支创建
3. 删除分支 1 2 git branch -D <branchName> // 本地 git push <origin> --delete <RemoteBranchName> // 远程
4. 合并分支
commit分支内容
切换回主分支或需要合并的分支
合并
5. 删除已经被线上删除的分支对应在本地的映射 假设这样一种情况:
我创建了本地分支b1并push到远程分支 origin/b1;
其他人在本地使用fetch或pull创建了本地的b1分支;
我删除了 origin/b1 远程分支;
其他人再次执行fetch或者pull并不会删除这个他们本地的 b1 分支,运行 git branch -a 也不能看出这个branch被删除了,如何处理?
使用下面的代码查看b1的状态:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ git remote show origin ------------------------------------------------------------------- * remote origin Fetch URL: git@github.com:xxx/xxx.git Push URL: git@github.com:xxx/xxx.git HEAD branch: master Remote branches: master tracked refs/remotes/origin/b1 stale (use 'git remote prune' to remove) Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date) ----------------------------------------------------------------------
这时候能够看到b1是stale的
1 git remote prune origin // 可以将其从本地版本库中去除
更简单的方法是使用这个命令,它在fetch之后删除掉没有与远程分支对应的本地分支:
6. 重命名远程分支 在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支。 例如下面的例子中,我需要把 devel 分支重命名为 develop 分支:
1 2 3 4 git branch -av //? git push --delete origin devel //删除远程分支 git branch -m devel develop // 重命名分支名 git push origin develop // 推送
然而,在 github 上操作的时候,我在删除远程分支时碰到这个错误:
1 2 3 4 5 6 7 8 $ git push --delete origin devel -------------------------------------------------------------------------------- remote: error: refusing to delete the current branch: refs/heads/devel To git@github.com:zrong/quick-cocos2d-x.git ! [remote rejected] devel (deletion of the current branch prohibited) error: failed to push some refs to 'git@github.com:zrong/quick-cocos2d-x.git' --------------------------------------------------------------------------------
这是由于在 github 中,devel 是项目的默认分支。要解决此问题,这样操作:
1. 进入 github 中该项目的 Settings 页面;
2. 设置 Default Branch 为其他的分支(例如 master);
3. 重新执行删除远程分支命令。
标签-tag 标签的很多命令和分支操作几乎一样
1 git tag test_tag c809ddbf83939a89659e51dc2a5fe183af384233 // //在某个commit 上打tag
1. 删除本地分支或标签
2. 删除远程分支或标签 1 2 git push origin --delete tag <RemoteTagName> git push origin :refs/tags/<RemoteTagName>
3. 把本地tag推送到远程 1 2 git push --tags git push origin test_tag //!!!本地tag推送到线上
4. 获取远程tag 1 git fetch origin tag <tagname>
存储-stash 1. 存储 1 2 git add . git stash(git stash save "test-cmd-stash") // 暂存改变
2. 恢复 1 2 git stash pop //将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下。 git stash apply //将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝
3. 查看
4. 移除 1 2 git stash drop [name] 删除stash或者加名字删除对应的 git stash clear // 删除所有
5. 查看指定stash的diff 可以使用git stash show命令,后面可以跟着stash名字。
代码回退 对于代码回退,我们一般使用git reset
或者git revert
。reset,revert都有撤销、回退的意思,但却各有千秋,区别还是很大的 ,所以该使用哪种命令一定要结合实际情况来决定。
git reset 1、git reset –mixed 版本号 :默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,保留修改的源码,回退了commit和index信息,本地工作目录内容以及暂存区内容会继续保留
2、git reset –soft 版本号:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
本地工作目录内容以及暂存区内容会在回退版本add基础上保留,和–mixed区别是执行后,相当于执行了add操作。
3、git reset –hard 版本号:彻底回退到某个版本,本地的源码也会变为某个版本的内容,暂存区以及本地工作目录内容全部丢失。
git revert 准确来说,revert是撤销/撤回/反提交的意思,我们不能按reset的思路理解
revert执行后会产生新的commit记录,是通过一次新的commit来恢复到之前旧的commit,但revert会保留恢复的该次提交后面的其它提交内容,假如后面的提交与要恢复的提交更改了同一地方,此时用revert就会产生冲突!
例如:
我们依次提交了t1,t2和t3;
我们执行git revert t1
,这么做其实结果是要撤销t1的提交,注意,仅仅是撤销t1的提交,把t1的修改恢复到t1之前也就是初始的状态,而不会影响t2,t3的提交。但如果t2,t3中修改了t1修改的同一地方,那么就会产生冲突,因为revert意图撤销t1的修改,但发现t2和t3把t1的修改再次修改了,此时,revert意图变得不清晰,因为它无法确定到底是应用你最新的修改,还是恢复到初始状态,这将由你来决定!
git reset和revert区别的总结
reset是彻底回退到指定的commit版本,该commit后的所有commit都将被清除,包括提交历史记录;
revert仅仅是撤销指定commit的修改,并不影响后续的commit,但所撤销的commit被后续的commit修改了同一地方则会产生冲突;
reset执行后不会产生记录,revert执行后会产生记录;
reset执行后无法再次恢复,revert执行后因为不会清除记录,并且会产生新纪录,所以文件不会丢失,你可以多次执行revert恢复到某次改变之前的状态;
reset执行后HEAD会后移,而revert的HEAD则一直是向前的;
回退操作扩展 取消对某文件的修改。还原到最近的版本,废弃本地做的修改。
取消已经add暂存的文件。即,撤销先前”git add”的操作 1 git reset HEAD <file>...
修改最后一次提交。用于修改上一次的提交信息,或漏提交文件等情况。
回退所有内容到上一个版本
回退a.py这个文件的版本到上一个版本
向前回退到第3个版本
将本地的状态回退到和远程的一样 1 git reset –hard origin/master
找回回退记录 查询本地日志
所以,我们要找回我们第二commit,只需要做如下操作:
1 git reset --hard 98abc5a
回退到某个版本
回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit.(代码回滚到上个版本,并提交git)
如果无法理解,参考此文章示例https://www.php.cn/faq/485052.html 。
git命令整理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 git fetch origin master:myfeature(从当前的master分支上新切一个自己的分支,分支名叫myfeature) git checkout myfeature(切换到myfeature分支上,开始开发) ………修改1 ………修改2 git add . (把当前目录下所有的修改都添加到暂存区,只有add了的改动才能commit) git commit -m “我的提交" git log(记住你的提交commitid) git checkout develop(切换到develop测试分支上) git fetch(git pull也可以,同步远程develop代码到本地) git cherry-pick commitid(第5步记住的commitid) git push origin HEAD:refs/for/develop 强制拉取服务器 git reset --hard HEAD git clean -f -d git pull git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git commit -am "init" 提交并且加注释 git remote add origin git@192.168.1.119:ndshowgit push origin master 将文件给推到服务器上 git remote show origin 显示远程库origin里的资源 git push origin master:developgit push origin master:hb-dev 将本地库与服务器上的库进行关联 git checkout --track origin/dev 切换到远程dev分支 git branch -D master develop 删除本地库develop git checkout -b dev 建立一个新的本地分支dev git merge origin/dev 将分支dev与当前分支进行合并 git checkout dev 切换到本地dev分支 git remote show 查看远程库 git add . git rm 文件名(包括路径) 从git中删除指定文件 git clone git://github.com/schacon/grit.git 从服务器上将代码给拉下来 git config --list 看所有用户 git ls-files 看已经被提交的 git rm [file name] 删除一个文件 git commit -a 提交当前repos的所有的改变 git add [file name] 添加一个文件到 git indexgit commit -v 当你用-v参数的时候可以看commit的差 git commit -m "This is the message describing the commit" 添加commit信息 git commit -a -a是代表add,把所有的change加到git index里然后再commitgit commit -a -v 一般提交命令 git log 看你commit的日志 git diff 查看尚未暂存的更新 git rm a.a 移除文件(从暂存区和工作区中删除) git rm --cached a.a 移除文件(只从暂存区中删除) git commit -m "remove" 移除文件(从Git中删除) git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除) git diff --cached 或 $ git diff --staged 查看尚未提交的更新 git stash push 将文件给push到一个临时空间中 git stash pop 将文件从临时空间pop下来