SSH keys
An SSH key allows you to establish a secure connection between yourcomputer and GitLab.
Before generating an SSH key, check if your system already has one byrunning cat ~/.ssh/id_rsa.pub
. If you see a long string starting withssh-rsa
orssh-dsa
, you can skip the ssh-keygen step.
To generate a new SSH key, just open your terminal and use code below. Thessh-keygen command prompts you for a location and filename to store the keypair and for a password. When prompted for the location and filename, youcan press enter to use the default.
It is a best practice to use a password for an SSH key, but it is notrequired and you can skip creating a password by pressing enter. Note thatthe password you choose here can't be altered or retrieved.
ssh-keygen -t rsa -C "XXX@XXX.com" # XXX is your own account
Use the code below to show your public key.
cat ~/.ssh/id_rsa.pub
Copy-paste the key to the 'My SSH Keys' section under the 'SSH' tab in youruser profile. Please copy the complete key starting withssh-
and endingwith your username and host.
Use code below to copy your public key to the clipboard. Depending on yourOS you'll need to use a different command:
Windows:
clip < ~/.ssh/id_rsa.pub
Mac:
pbcopy < ~/.ssh/id_rsa.pub
GNU/Linux (requires xclip):
xclip -sel clip < ~/.ssh/id_rsa.pub
git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支
git clone 指定分支:git clone -b <branch> <remote_repo> 例如: git clone -b 指定的分支名字
1 查看远程分支
- $ git branch -a
- * br-2.1.2.2
- master
- remotes/origin/HEAD -> origin/master
- remotes/origin/br-2.1.2.1
- remotes/origin/br-2.1.2.2
- remotes/origin/br-2.1.3
- remotes/origin/master
2 查看本地分支
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
- $ git branch
- * br-2.1.2.2
- master
3 创建分支
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
- $ git branch test
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
- $ git branch
- * br-2.1.2.2
- master
- test
线面是把分支推到远程分支
- $ git push origin test
4 切换分支到test
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
- $ git branch
- * br-2.1.2.2
- master
- test
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
- $ git checkout test
- M jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java
- M jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java
- Switched to branch 'test'
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)
- $ git branch
- br-2.1.2.2
- master
- * test
M 表示cong 原来分支(上一次修改没有提交br-2.1.2.2)带过来的修改
5 删除本地分支 Git branch -d xxxxx
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)
- $ git checkout br-2.1.2.2
- M jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java
- M jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java
- Switched to branch 'br-2.1.2.2'
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
- $ git br
- * br-2.1.2.2
- master
- test
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
- $ git br -d test
- Deleted branch test (was 17d28d9).
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
- $ git br
- * br-2.1.2.2
- master
6 查看本地和远程分支 -a。前面带*号的代表你当前工作目录所处的分支
- remotes/origin/HEAD -> origin/master #啥意思呢?
”在clone完成之后,Git 会自动为你将此远程仓库命名为origin(origin只相当于一个别名,运行git remote –v或者查看.git/config可以看到origin的含义),并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名) 这样的形式表示远程分支,所以origin/master指向的是一个remote branch(从那个branch我们clone数据到本地)“
这个是执行 git remote -v 的结果,看出来origin其实就是远程的git地址的一个别名。
- $ git remote -v
- origin git@xxxx/jingwei.git (fetch)
- origin git@xxxx/jingwei.git (push)
- shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)
- $ git branch -a
- br-2.1.2.2
- master
- * test
- remotes/origin/HEAD -> origin/master
- remotes/origin/br-2.1.2.1
- remotes/origin/br-2.1.2.2
- remotes/origin/br-2.1.3
- remotes/origin/master
7 删除远程版本
- git push origin :br-1.0.0
- 删除远程分支
- git branch -r -d origin/branch-name
- git push origin :branch-name
一.查看git提交的历史信息
git log命令显示从最近到最远的提交日志
如果嫌输出信息太多,可以试试加上--pretty=oneline参数,代码如下:
- $ git log --pretty=oneline
- c7b8b201284777366e2cf21d7f104eac123211a8 update add spark
- 038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop
- 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop
二.版本回退(回退到过去)
- 第一种:根据head^来确定回退版本
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
参考实例:回退到上一个版本
- $ git reset --hard HEAD^
- HEAD is now at 038491d update hadoop
- 第二种:根据版本ID来确定回退版本
- #查看提交的历史版本信息
- $ git log --pretty=oneline
- c7b8b201284777366e2cf21d7f104eac123211a8 update add spark
- 038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop
- 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop
- #回退到038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop这个版本</span>
- $ git reset --hard 038491dda6a7982ae02bbb1c85908c4eabf0f639
- HEAD is now at 038491d update hadoop
- #再次查看历史记录,发现前面的版本没有了!
- $ git log --pretty=oneline
- 038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop
- 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop
三.版本回退(回退到未来)
从上个例子中,可以看出来,当使用git reset 回退到过去版本时,那么git log 会看不到当前版本的后面提交信息,怎么办!
答:使用git reflog 可以查看执行命令的历史信息
参考实例:回退到未来
- #查看执行的历史命令,前面的那个编号,就是可以选择的版本号
- $ git reflog
- 038491d HEAD@{0}: reset: moving to 038491dda6a7982ae02bbb1c85908c4eabf0f639
- c7b8b20 HEAD@{1}: reset: moving to c7b8b20
- 557dd6f HEAD@{2}: reset: moving to 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d
- 038491d HEAD@{3}: reset: moving to HEAD^
- c7b8b20 HEAD@{4}: commit: update add spark
- 038491d HEAD@{5}: commit: update hadoop
- 557dd6f HEAD@{6}: commit (initial): add hadoop
- #回退到未来
- $ git reset --hard c7b8b20
- HEAD is now at c7b8b20 update add spark
- #再次查看提交的历史信息果然又有了3个
- $ git log --pretty=oneline
- c7b8b201284777366e2cf21d7f104eac123211a8 update add spark
- 038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop
- 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop
Git:代码冲突常见解决方法
如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,
在发布这个配置文件的时候,会发生代码冲突:
error: Your local changes to the following files would be overwritten by merge:
protected/config/main.php
Please, commit your changes or stash them before you can merge.
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
然后可以使用Git diff -w +文件名 来确认代码自动合并的情况.
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用